1、多条件去重
List<user> infoList = new ArrayList<>();
//实体类 userName orderNumber age
infoList.add(new user("11111", "xc", "22"));
infoList.add(new user("11111", "xc", "33"));
infoList.add(new user("11111", "xy", "22"));
infoList.add(new user("22222", "xc", "23"));
infoList.add(new user("22222", "xc", "33"));
infoList.add(new user("22222", "xy", "22"));
List<user> list = infoList.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(f -> f.getUserName() + f.getOrderNumber()))), ArrayList::new));
System.out.println(list);
2、多条件判断是否存在重复数据
List<SupplierPerformanceBillHead> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
SupplierPerformanceBillHead bean = new SupplierPerformanceBillHead();
bean.setToElsAccount(String.valueOf(i));
if (i==2){
bean.setToElsAccount(String.valueOf(i-1));
bean.setTemplateNumber("测试");//这里修改,会出现不重复
}else {
bean.setTemplateNumber("测试");
}
bean.setTemplateName("www");
list.add(bean);
}
for (SupplierPerformanceBillHead head : list) {
System.out.println(head);
}
// 使用stream和Lambda表达式进行分组和过滤
Map<String, Long> duplicates = list.stream()
.collect(Collectors.groupingBy(person -> person.getToElsAccount() + "_" + person.getTemplateNumber()+ "_" + person.getTemplateName(), Collectors.counting()))
.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
if (duplicates.isEmpty()){
System.out.println("没有重复数据");
}else {
System.out.println("存在重复数据");
}
// 打印重复的数据
duplicates.forEach((key, value) -> System.out.println("重复字符组: " + key + ", 条数: " + value));