计算机类{
内部编号;
字符串操作系统名称;
//id和osName的getter和setter
//这个类不包含hashcode和equals方法
}
我有计算机对象列表
Computer c1 = new Computer(1, "Window10");
Computer c2 = new Computer(2, "Window11");
Computer c3 = new Computer(3, "Linux");
Computer c4 = new Computer(4, "Window10");
Computer c5 = new Computer(5, "Window10");
我需要使用 java stream API 列出所有重复对象列表(通过比较 osName)。
计算机(1,“Window10”)
电脑(4, "Window10")
电脑(5,“Window10”)
请建议最好的方法。
提前致谢。
您可以使用
Collectors.groupingBy
创建一个 Map
的操作系统名称到计算机列表,然后过滤以仅获取具有多个元素的列表(即包含重复项)。
List<Computer> duplicated = computers.stream().collect(Collectors.groupingBy(Computer::getOsName))
.entrySet().stream().filter(e -> e.getValue().size() > 1)
.flatMap(e -> e.getValue().stream()).toList();