Java stream 处理分组后取最新时间的一组

时间:2025-02-17 20:59:40
public class StreamSkill { public static void main(String[] args) { List<TestData> list = new ArrayList<>(); TestData.TestDataBuilder builder = TestData.builder(); builder.id(1).name("开关1").sn("666666").timeData(DateUtil.parse("2023-06-21 00:00:00")); list.add(builder.build()); builder.id(2).name("开关2").sn("555555").timeData(DateUtil.parse("2023-06-21 05:00:00")); list.add(builder.build()); builder.id(3).name("开关2").sn("555555").timeData(DateUtil.parse("2023-06-21 09:00:00")); list.add(builder.build()); builder.id(4).name("开关3").sn("444444").timeData(DateUtil.parse("2023-06-21 16:00:00")); list.add(builder.build()); builder.id(5).name("开关3").sn("444444").timeData(DateUtil.parse("2023-06-21 19:00:00")); list.add(builder.build()); System.out.println(list); Map<String, TestData> map = list.stream().collect( Collectors.groupingBy(TestData::getSn, Collectors.collectingAndThen( Collectors.reducing((t1, t2) -> t1.getTimeData().after(t2.getTimeData()) ? t1 : t2), Optional::get)) ); System.out.println(map); } } @Data @Builder class TestData{ private Integer id; private String name; private String sn; private Date timeData; }