java8 分组排序数据丢失

public static void main(String[] args) {
        ArrayList<LinkedHashMap> maps = new ArrayList<>();
        LinkedHashMap<String, Object> map1 = new LinkedHashMap<>();
        map1.put("statu","F");
        map1.put("time","2022-07-10 19:25:00");
        LinkedHashMap<String, Object> map2= new LinkedHashMap<>();
        map2.put("statu","F");
        map2.put("time","2022-07-10 19:25:00");
        LinkedHashMap<String, Object> map3= new LinkedHashMap<>();
        map3.put("statu","T");
        map3.put("time","2022-07-10 19:20:00");
        maps.add(map1);
        maps.add(map2);
        maps.add(map3);
        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("data",maps);

        List<LinkedHashMap> data = (List<LinkedHashMap>) stringObjectHashMap.get("data");


        ObjectMapper objectMapper = new ObjectMapper();
       // objectMapper.convertValue((List) stringObjectHashMap.get("data"), new TypeReference<List<people>>() {});
        List<people> list = JSONObject.parseArray(JSONObject.toJSONString(stringObjectHashMap.get("data"))).toJavaList(people.class);
        //当两条数据分组条件相同和排序字段值相同时  会丢失相同的数据
        Map<String, List<people>> collect = list.stream()
                .collect(Collectors.groupingBy(people::getStatu, toSortedList(
                        Comparator.comparing(people::getTime).reversed())));

        Map<String, List<people>> collect1 = list.stream().sorted(Comparator.comparing(people::getTime))
                .collect(Collectors.groupingBy(people::getStatu));
                
        System.out.println("----------collect-----------"+collect;
        System.out.println("----------collect1-----------"+collect1);
    }
    public static <T> Collector<T, ?, List<T>> toSortedList(Comparator<? super T> c) {
        return Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(c)), ArrayList::new);
    }
    }
    ````
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值