ArrayList<Student> collect1 = list.stream().collect(
// 使用 collectingAndThen 收集器,实现在最终收集结果上执行操作
Collectors.collectingAndThen(
// 使用 toCollection 收集器,将流中元素收集到指定的容器类型中(这里是 TreeSet)
Collectors.toCollection(
() -> new TreeSet<>(
// 按照学生 ID 进行比较排序
Comparator.comparing(Student::getId)
)
),
ArrayList::new
));
// 多条件去重复
// 使用 parallelStream 并行流进行操作,以提高效率
blackModeDTOs = blackModeDTOs.parallelStream()
.collect(Collectors.collectingAndThen(
// 使用 collectingAndThen 收集器,实现在最终收集结果上执行操作
Collectors.toCollection(
() -> new TreeSet<BlackModeDTO>(
// 创建比较器对 BlackModeDTO 对象进行比较排序
new Comparator<BlackModeDTO>() {
@Override
public int compare(BlackModeDTO o1, BlackModeDTO o2) {
// 比较两个对象的 cifName 和 cifNo 属性是否相同,决定是否去重
if (o1.getCifName().trim().equals(o2.getCifName().trim()) &&
o1.getCifNo().trim().equals(o2.getCifNo().trim())) {
// 如果属性相同,则返回 0 表示不保留该元素(去重)
return 0;
}
// 如果属性不同,则返回 1 表示保留该元素(不去重)
return 1;
}
}
)
),
// 将 TreeSet 转换为 ArrayList 结果返回
ArrayList<BlackModeDTO>::new)
);