本サイトはプロモーション(広告)が含まれています。

【Java】ListのMapをソートする方法(複数キー・昇順降順も)

【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}]

Javaの記事一覧へ

PAGE TOP