联合主键的情况下,分组后获取时间最新的一条
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class User {
private Integer age;
private String name;
private String score;
private LocalDate startDate;
private LocalDate endDate;
}
public class test12 {
public static void main(String[] args) {
List<User> list = Lists.newArrayList();
list.add(User.builder().age(1).name("L03").startDate(LocalDate.of(2021 , 3 , 1)).build());
list.add(User.builder().age(3).name("L03").startDate(LocalDate.of(2021 , 4 , 5)).build());
list.add(User.builder().age(6).name("L03").startDate(LocalDate.of(2021 , 4 , 7)).build());
list.add(User.builder().age(8).name("L03").build());
list.add(User.builder().age(2).name("L03").build());
list.add(User.builder().age(4).name("Q21").startDate(LocalDate.of(2021 , 2 , 1)).build());
list.add(User.builder().age(4).name("Q22").startDate(LocalDate.of(2021 , 1 , 1)).build());
/**
* 联合主键的情况下
* 分组 后获取创建时间 最新的一条
*/
List<User> collect = new ArrayList<>(list.stream().collect(Collectors.toMap(
User::getName,
v -> v,
(v1, v2) -> {
LocalDate startDate = v1.getStartDate();
LocalDate startDate1 = v2.getStartDate();
if (startDate == null || startDate1 == null) {
return startDate != null ? v1 : v2; //拿到不为空的 ,都为空取后一条
}
return startDate.isAfter(startDate1) || startDate.isEqual(startDate1) ? v1 : v2;
}
)).values());
collect.forEach(System.out::println);
}
}