【Java】List<Map<String, String>>をソートする方法
List<Map<String, String>>をソートするには、Comparator.comparingを利用することで指定したMapのキー値でソートできます。
ソート順は指定項目の昇順となります。
// Mapのキー値の番号でソートする場合
list.sort(Comparator.comparing((Map<String, String> map) -> map.get("番号")));
comparing「比較する」の名称のとおりMapのキー値で比較してソートするメソッドです。
以下のとおり、実行前と実行後では
- 番号 昇順
でソートできていることが確認できます。
List<Map<String, String> > list= new ArrayList <>();
// 番号="03",年月日="20231103"のMapをリストに追加
Map<String, String> map1 = new HashMap<>();
map1.put("番号", "03");
map1.put("年月日", "20231103");
list.add(map1);
// 番号="01",年月日="20231201"のMapをリストに追加
Map<String, String> map2 = new HashMap<>();
map2.put("番号", "01");
map2.put("年月日", "20231201");
list.add(map2);
// 番号="01",年月日="20231101"のMapをリストに追加
Map<String, String> map3 = new HashMap<>();
map3.put("番号", "01");
map3.put("年月日", "20231101");
list.add(map3);
// 番号="02",年月日="20231001"のMapをリストに追加
Map<String, String> map4 = new HashMap<>();
map4.put("番号", "02");
map4.put("年月日", "20231001");
list.add(map4);
// ソート前のListの状況を出力
System.out.println(list);
list.sort(Comparator.comparing((Map<String, String> map) -> map.get("番号")));
// ソート後のListの状況を出力
System.out.println(list);
// 実行結果
// ソート前
[{番号=03, 年月日=20231103}, {番号=01, 年月日=20231201},
{番号=01, 年月日=20231101}, {番号=02, 年月日=20231001}]
// ソート後
[{番号=01, 年月日=20231201}, {番号=01, 年月日=20231101},
{番号=02, 年月日=20231001}, {番号=03, 年月日=20231103}]
List<Map<String, String>>を降順でソートする方法
List<Map<String, String>>を降順でソートするには、Comparator.comparingにreversedを追加することで降順でソートすることができます。
// Mapのキー値の番号でソートする場合
list.sort(Comparator.comparing((Map<String, String> map) -> map.get("番号")).reversed());
reversed()を利用することで降順指定となります。
以下のとおり、実行前と実行後では
- 番号 降順
でソートできていることが確認できます。
List<Map<String, String> > list= new ArrayList <>();
// 番号="01",年月日="20231201"のMapをリストに追加
Map<String, String> map1 = new HashMap<>();
map1.put("番号", "01");
map1.put("年月日", "20231201");
list.add(map1);
// 番号="03",年月日="20231103"のMapをリストに追加
Map<String, String> map2 = new HashMap<>();
map2.put("番号", "03");
map2.put("年月日", "20231103");
list.add(map2);
// 番号="01",年月日="20231101"のMapをリストに追加
Map<String, String> map3 = new HashMap<>();
map3.put("番号", "01");
map3.put("年月日", "20231101");
list.add(map3);
// 番号="02",年月日="20231001"のMapをリストに追加
Map<String, String> map4 = new HashMap<>();
map4.put("番号", "02");
map4.put("年月日", "20231001");
list.add(map4);
// ソート前のListの状況を出力
System.out.println(list);
list.sort(Comparator.comparing((Map<String, String> map) -> map.get("番号")).reversed());
// ソート後のListの状況を出力
System.out.println(list);
// 実行結果
// ソート前
[{番号=01, 年月日=20231201}, {番号=03, 年月日=20231103},
{番号=01, 年月日=20231101}, {番号=02, 年月日=20231001}]
// ソート後
[{番号=03, 年月日=20231103}, {番号=02, 年月日=20231001},
{番号=01, 年月日=20231201}, {番号=01, 年月日=20231101}]
List<Map<String, String>>を複数条件でソートする方法
List<Map<String, String>>を降順でソートするには、Comparator.comparingにthenComparingを追加することで複数条件でソートすることができます。
// Mapのキー値の番号でソートする場合
list.sort(Comparator.comparing((Map<String, String> map) -> map.get("番号"))
.thenComparing(Comparator.comparing(map -> map.get("年月日"))));
以下のとおり、実行前と実行後では
- 番号 昇順
- 年月日 昇順
でソートできていることが確認できます。
List<Map<String, String> > list= new ArrayList <>();
// 番号="01",年月日="20231201"のMapをリストに追加
Map<String, String> map1 = new HashMap<>();
map1.put("番号", "01");
map1.put("年月日", "20231201");
list.add(map1);
// 番号="03",年月日="20231103"のMapをリストに追加
Map<String, String> map2 = new HashMap<>();
map2.put("番号", "03");
map2.put("年月日", "20231103");
list.add(map2);
// 番号="01",年月日="20231101"のMapをリストに追加
Map<String, String> map3 = new HashMap<>();
map3.put("番号", "01");
map3.put("年月日", "20231101");
list.add(map3);
// 番号="02",年月日="20231001"のMapをリストに追加
Map<String, String> map4 = new HashMap<>();
map4.put("番号", "02");
map4.put("年月日", "20231001");
list.add(map4);
// ソート前のListの状況を出力
System.out.println(list);
list.sort(Comparator.comparing((Map<String, String> map) -> map.get("番号"))
.thenComparing(Comparator.comparing(map -> map.get("年月日"))));
// ソート後のListの状況を出力
System.out.println(list);
// 実行結果
// ソート前
[{番号=01, 年月日=20231201}, {番号=03, 年月日=20231103},
{番号=01, 年月日=20231101}, {番号=02, 年月日=20231001}]
// ソート後
[{番号=01, 年月日=20231101}, {番号=01, 年月日=20231201},
{番号=02, 年月日=20231001}, {番号=03, 年月日=20231103}]









コメントを残す