Java 基于 lambda 实现根据集合当中的 supplierFollowSn 字段获取重复数量以及重复数据
假设有以下实体类 Supplier:
public class Supplier {
private String supplierFollowSn;
public Supplier(String supplierFollowSn) {
this.supplierFollowSn = supplierFollowSn;
}
public String getSupplierFollowSn() {
return supplierFollowSn;
}
public void setSupplierFollowSn(String supplierFollowSn) {
this.supplierFollowSn = supplierFollowSn;
}
}
现在我们有一个包含多个 Supplier 对象的集合,我们希望根据集合中的 supplierFollowSn 字段获取重复数量以及重复数据。可以使用 Java 8 的 Stream API 和 lambda 表达式来实现:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Supplier> suppliers = new ArrayList<>();
suppliers.add(new Supplier("A001"));
suppliers.add(new Supplier("A002"));
suppliers.add(new Supplier("A001"));
suppliers.add(new Supplier("A003"));
suppliers.add(new Supplier("A002"));
Map<String, Long> duplicates = suppliers.stream()
.collect(Collectors.groupingBy(Supplier::getSupplierFollowSn, Collectors.counting()))
.entrySet()
.stream()
.filter(entry -> entry.getValue() > 1)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println("重复数量:" + duplicates.size());
List<String> duplicateData = suppliers.stream()
.map(Supplier::getSupplierFollowSn)
.filter(supplierFollowSn -> duplicates.containsKey(supplierFollowSn))
.distinct()
.collect(Collectors.toList());
System.out.println("重复数据:" + duplicateData);
}
}
运行上述代码,将会输出:
重复数量:2
重复数据:[A001, A002]
说明集合中的 supplierFollowSn 字段有两个重复的值,分别是 A001 和 A002
原文地址: https://www.cveoy.top/t/topic/hLny 著作权归作者所有。请勿转载和采集!