系统开发系列 之关于Java的集合排序问题的应用

文章展示了两种在Java中对List<Map<String,Object>>集合按sort字段进行升序或降序排序的方法,以及如何对Map<String,List>根据value的size进行排序。第一种方式是使用Collections.sort()配合自定义Comparator,第二种方式利用Java8的StreamAPI进行排序。

1、对List<map<string, object>>集合中某个字段排序

//List<Map<String, Object>> testList = [{name=aaa, sort=2}, {name=bbb, sort=1}, {name=ccc, sort=3}, {name=ddd, sort=5}, {name=eee, sort=4}]

//第一种
Collections.sort(testList, new MapComparatorDesc());
static class MapComparatorDesc implements Comparator<Map<String, Object>> {
        @Override
        public int compare(Map<String, Object> m1, Map<String, Object> m2) {
            Integer v1 = Integer.valueOf(m1.get("sort").toString());
            Integer v2 = Integer.valueOf(m2.get("sort").toString());
            if (v2 != null) {
                return v2.compareTo(v1);
            }
            return 0;
        }
    }

Collections.sort(testList, new MapComparatorAsc());
static class MapComparatorAsc implements Comparator<Map<String, Object>> {
        @Override
        public int compare(Map<String, Object> m1, Map<String, Object> m2) {
            Integer v1 = Integer.valueOf(m1.get("sort").toString());
            Integer v2 = Integer.valueOf(m2.get("sort").toString());
            if(v1 != null){
                return v1.compareTo(v2);
            }
            return 0;
        }
    }

    
//第二种
testList.sort((o1, o2) -> o1.get("sort").toString().compareTo(o2.get("sort").toString();

2、Map<String, List>根据value的size排序

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aaa");
list.add("ccc");
list.add("ddd");
Map<String, List<String>> group = list.stream().collect(Collectors.groupingBy(x->x));

//第一种
//根据List的size进行排序
List<Map.Entry<String, List<String>>> sortedList = group.entrySet()
           .stream()
           .sorted(Comparator.comparingInt(entry -> entry.getValue().size()))
           .collect(Collectors.toList());
//输出结果
for (Map.Entry<String, List<String>> entry : sortedList) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
   }

//第二种
使用Collections.sort()排序,重写compare方法;方法中比较List的size属性返回结果进行排序。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值