奇奇奇奇怪, 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日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大