根据两个值对地图列表进行排序
Sort a list of maps based on two values
初始化代码如下:
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
Map<String, Object> map2 = new HashMap<>();
Map<String, Object> map3 = new HashMap<>();
Map<String, Object> map4 = new HashMap<>();
Map<String, Object> map5 = new HashMap<>();
map1.put("Age", 23);
map2.put("Age", 24);
map3.put("Age", 25);
map4.put("Age", 23);
map5.put("Age", 24);
map1.put("Name", "Rohan");
map2.put("Name", "Shyam");
map3.put("Name", "George");
map4.put("Name", "Ram");
map5.put("Name", "Sam");
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
现在,我想根据 'Age' 值对列表进行排序,然后对于每个相同的 'Age' 值,再次根据 'Name' 值排序。
所以,我需要的输出是:
{Age=23, Name=Ram}
{Age=23, Name=Rohan}
{Age=24, Name=Sam}
{Age=24, Name=Shyam}
{Age=25, Name=George}
我可以进行第一次排序,但无法进行第二次排序。
您可以根据这两个值实施自定义 Comparator
:
list.sort(Comparator.comparing((Map<String, Object> map) -> (Integer) map.get("Age"))
.thenComparing((Map<String, Object> map) -> (String) map.get("Name"))
);
初始化代码如下:
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
Map<String, Object> map2 = new HashMap<>();
Map<String, Object> map3 = new HashMap<>();
Map<String, Object> map4 = new HashMap<>();
Map<String, Object> map5 = new HashMap<>();
map1.put("Age", 23);
map2.put("Age", 24);
map3.put("Age", 25);
map4.put("Age", 23);
map5.put("Age", 24);
map1.put("Name", "Rohan");
map2.put("Name", "Shyam");
map3.put("Name", "George");
map4.put("Name", "Ram");
map5.put("Name", "Sam");
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
现在,我想根据 'Age' 值对列表进行排序,然后对于每个相同的 'Age' 值,再次根据 'Name' 值排序。
所以,我需要的输出是:
{Age=23, Name=Ram}
{Age=23, Name=Rohan}
{Age=24, Name=Sam}
{Age=24, Name=Shyam}
{Age=25, Name=George}
我可以进行第一次排序,但无法进行第二次排序。
您可以根据这两个值实施自定义 Comparator
:
list.sort(Comparator.comparing((Map<String, Object> map) -> (Integer) map.get("Age"))
.thenComparing((Map<String, Object> map) -> (String) map.get("Name"))
);