java根据某字段分组并筛选出最新的数据

java根据某字段分组并筛选出最新的数据

原数据

[{"deviceNumber":"1617423","turnonLasttime":"2020-9-20 00:00:00","unitName":"测试1"},
{"deviceNumber":"1617423","turnonLasttime":"2022-10-18 00:00:00","unitName":"测试2"},
{"deviceNumber":"1614323","turnonLasttime":"2020-7-21 00:00:00","unitName":"测试1"},
{"deviceNumber":"1614323","turnonLasttime":"2022-11-12 00:00:00","unitName":"测试2"},
{"deviceNumber":"1663323","turnonLasttime":"","unitName":"测试1"},
{"deviceNumber":"1663323","turnonLasttime":"2022-11-12 00:00:00","unitName":"测试2"},
{"deviceNumber":"1654544","turnonLasttime":"","unitName":"测试1"},
{"deviceNumber":"1654544","turnonLasttime":"","unitName":"测试2"},
{"deviceNumber":"1654543","turnonLasttime":"2020-7-21 00:00:00","unitName":"测试1"},
{"deviceNumber":"1654543","turnonLasttime":"2020-7-21 00:00:00","unitName":"测试2"}]

根据deviceNumber分组,根据turnonLasttime时间取最新
都为空或时间相同随机取(取遍历时最后一个)
一个为空取不为空的

        //分组并筛选最新的数据
        List<DeviceSync> collect = new ArrayList<>(deviceSyncs.stream().collect(Collectors.toMap(
                DeviceSync::getDeviceNumber,
                v->v,
                (v1,v2)->{

                    if (v1.getTurnonLasttime() == null || v2.getTurnonLasttime() == null){
                        return v1.getTurnonLasttime() != null?v1:v2; //拿到不为空的,都为空取后一条
                    }
                    LocalDate startDate = v1.getTurnonLasttime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                    LocalDate startDate1 = v2.getTurnonLasttime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                    return startDate.isAfter(startDate1) || startDate.isEqual(startDate1) ? v1:v2;
                }
        )).values());

筛选后数据

[{"deviceNumber":"1617423","turnonLasttime":"2022-10-18 00:00:00","unitName":"测试2"},
{"deviceNumber":"1614323","turnonLasttime":"2022-11-12 00:00:00","unitName":"测试2"},
{"deviceNumber":"1663323","turnonLasttime":"2022-11-12 00:00:00","unitName":"测试2"},
{"deviceNumber":"1654544","turnonLasttime":"","unitName":"测试2"},
{"deviceNumber":"1654543","turnonLasttime":"2020-7-21 00:00:00","unitName":"测试2"}]

有错欢迎大家指出


版权声明:本文为weixin_43998503原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。