【问题标题】:Sort a list of maps based on two values根据两个值对地图列表进行排序
【发布时间】:2021-07-20 23:51:29
【问题描述】:

这里是初始化代码:

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=23, Name=Ram}

{Age=23, Name=Rohan}

{Age=24, Name=Sam}

{Age=24, Name=Shyam}

{Age=25, Name=George}

我可以进行第一次排序,但无法执行第二次排序。

【问题讨论】:

    标签: java sorting hashmap comparator


    【解决方案1】:

    您可以根据这两个值实现自定义Comparator

    list.sort(Comparator.comparing((Map<String, Object> map) -> (Integer) map.get("Age"))
                        .thenComparing((Map<String, Object> map) -> (String) map.get("Name"))
    );
    

    【讨论】:

    • 谢谢穆雷尼克
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2010-10-26
    • 2015-11-07
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多