奇奇奇奇怪, 2021-12-24 17:50 采纳率: 50%
浏览 32

List<Map<String,Object> 按照两个规则排序

问题遇到的现象和发生背景

数据如下,如果name属性有值,那就按照name值排序,按照name排序完之后再按照age排序。

问题相关代码,请勿粘贴截图

Map<String, Object> map = new HashMap<String, Object>();
map.put("name", null);
map.put("age", 13);

        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name", null);
        map2.put("age", 15);

        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("name", null);
        map3.put("age", 20);

        Map<String, Object> map4 = new HashMap<String, Object>();
        map4.put("name", "CC");
        map4.put("age", 50);

        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
        list.add(map);
        list.add(map2);
        list.add(map3);
        list.add(map4);
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 笔下天地宽 2021-12-24 18:19
    关注
    
     list.sort(new Comparator<Map<String, Object>>() {
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    if (o1 != null && o2 != null && o1.get("name") != null && o2.get("name") != null){
                        int num = ((String)o1.get("name")).compareTo((String)o2.get("name"));
                        if ( num != 0){
                            return num;
                        } else {
                            return ((Integer) o1.get("age")).compareTo((Integer) o2.get("age"));
                        }
    
                    }
                    // 为空的放到一起
                    return -1;
                }
            });
    

    结果:[{"name":"CC","age":50},{"age":20},{"age":15},{"age":13}]

    评论

报告相同问题?

问题事件

  • 创建了问题 12月24日