关于List<Map<String,Object>>两个合并,交集,并集或者单个的排序,去重java8

  1. 单个List<Map<String,Object>> 排序,引用的是java8 List sort代码如下,此处的sort是用了Arrays.sort(a, (Comparator) c)非常强大,试了下十万级别的数据量,速度也是杠杠的。

//升序
productNetList.sort(Comparator.comparing(e -> e.get("hs").toString()));
//对于特定user对象处理
// 按照List中对象的id属性降序
productNetList.sort(Comparator.comparing(User::getId).reversed());
// 多个条件升序
productNetList.sort(Comparator.comparing(User::getId).thenComparing(User::getBigId));
// id升序,deId降序
productNetList.sort(Comparator.comparing(User::getId).reversed().thenComparing(User::getBigId));
// Collection升序排序
Collections.sort(user, new Comparator(){
    public int compare(User p1, User p2) {
        return Integer.parseInt(p1.getBigId()) - Integer.parseInt(p2.getBigId());
    }
});
  1. 单个List<Map<String,Object>> 根据object里面的某个属性值去重,根据set无重复值的特性重新创建一个set.

productNetList = productNetList.stream().collect(Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> p.get("hs300").toString()))),
                ArrayList::new));
  1. 两个List<Map<String,Object>> 根据某相同的属性值取交集

List<Map<String, Object>> andList = list1.parallelStream()
                .filter(item -> list2.parallelStream()
                        .map(e -> e.get("rq").toString()).collect(Collectors.toList()).contains(item.get("rq").toString()))
                .collect(Collectors.toList());
  1. 两个List<Map<String,Object>>根据某相同的属性值合并

list1.addAll(list2);
List<Map<String, Object>> combine = list1.parallelStream()
                .collect(Collectors.groupingBy(group -> group.get("rq").toString())) // 根据map中rq的value值进行分组, 这一步的返回结果Map<String,List<Map<String, Object>>>
                .entrySet() // 得到Set<Map.Entry<String, List<Map<String, Object>>>
                .stream()
                .map(m -> { // 进入映射环境
                    // m.getValue()的结果是 List<Map<String, Object>>
                    Map<String, Object> collect = m.getValue().stream()
                            // o.entrySet() 的结果是 Set<Map.Entry<String, Object>>[
                            .flatMap(o -> o.entrySet().stream()).filter(e -> e.getValue() != null)//过滤下,value需要是不为空的,否则报错
                            // (m1, m2) -> m1 的意思是如果key相同 m1 == m2 则value使用m1(此处为sourceList中的值)
                            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a1, a2) -> m1
                            ));
                    return collect;
                }).sorted(Comparator.comparing(m -> m.get("rq").toString())).collect(Collectors.toList());
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值