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

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日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境