Java stream 处理分组后取最新时间的一组
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;
}