Contents
【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}]
コメントを残す