こんにちは。
Spring Bootについて初学者なので拙いところもあると思いますが、よろしくお願いします。
実現したいこと
あるModelをControllerでグループ化(Collectors.groupingBy
)して、そのグループごとにHTMLで表示しようとしたのですが、そのグループの表示順が想定と違っていました。
具体的に言うと、StringであるKeyをABC順にしてHTMLで表示したいです。
###例
例として以下のような名前と出身地のデータがあり、出身地でグループ化して50音で並べたいとします。
Id | name | hometown |
---|---|---|
1 | Yamada | Tokyo |
2 | Narita | Aomori |
3 | Nakayama | Tokyo |
4 | Iguchi | Kagawa |
5 | Tsurumi | Kagawa |
6 | Tanaka | Wakayama |
この場合
●青森
- 成田
●香川
- 井口
- 鶴見
●東京
- 中山
- 山田
●和歌山
- 田中
という順番になります。(名前は順不同)
###コード
Model
Java
1package com.example.demo.Test; 2 3import java.time.LocalDateTime; 4 5import javax.persistence.Column; 6import javax.persistence.Entity; 7import javax.persistence.GeneratedValue; 8import javax.persistence.GenerationType; 9import javax.persistence.Id; 10import javax.persistence.Table; 11 12import lombok.Getter; 13import lombok.Setter; 14 15@Getter 16@Setter 17@Entity 18@Table(name="HogeList") 19public class HogeList { 20 21 @Id 22 @GeneratedValue(strategy=GenerationType.IDENTITY) 23 private int Id; 24 25 @Column(name="name") 26 private String Name; 27 28 @Column(name="hometown") 29 private String Hometown; 30}
Repository
Java
1package com.example.demo.Test; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4 5public interface HogeRepository extends JpaRepository<HogeList, Integer> { 6}
Controller
Java
1package com.example.demo.Test; 2 3import java.util.ArrayList; 4import java.util.HashMap; 5import java.util.List; 6import java.util.Map; 7import java.util.stream.Collectors; 8 9import org.springframework.beans.factory.annotation.Autowired; 10import org.springframework.stereotype.Controller; 11import org.springframework.ui.Model; 12import org.springframework.web.bind.annotation.GetMapping; 13import org.springframework.web.bind.annotation.PostMapping; 14import org.springframework.web.bind.annotation.RequestParam; 15 16 17@Controller 18public class HogeController { 19 20 @Autowired 21 private HogeRepository hogeRepository; 22 23 @GetMapping("/hoge") 24 public String getHogeList(Model model) { 25 List<HogeList> HogeList = hogeRepository.findAll(); 26 //Hometownごとに分ける sortしたい 27 Map<String, List<HogeList>> HogeMap = HogeList 28 .stream() 29 .collect(Collectors.groupingBy(x -> x.getHometown())); 30 31 model.addAttribute("HogeList", HogeList); 32 33 return "hoge"; 34 } 35}
View
Thymeleaf
1<table class="table"> 2 <tr> 3 <!--ここの順番をアルファベット順でソートしたい--> 4 <th th:each="group: ${HogeMap}" th:text="|【${group.value[0].Hometown}】|"></th> 5 </tr> 6 <tr> 7 <td th:each="group: ${HogeMap}"> 8 <th:block th:each="item: ${group.value}"> 9 <div th:text="${item.Name}"></div> 10 </th:block> 11 </td> 12 </tr> 13</table>
###その他
調べてたらこの記事が出たんですけど、
https://teratail.com/questions/256132
これの2番目の回答がやりたいことに近いです。
しかし今回の場合のEnumの定義とその書き方がわかりませんでした・・・。
不明瞭な点もあるかと思いますが、回答よろしくお願いします。
補足情報
Eclipse 2020 Java FullEdition
AmazonCorretto jdk15.0.2_7
SpringBoot 2.4.3
MySQL 8.0.23
Windows10 Pro 20H2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/03 01:29