根据 Java 流中的属性从对象列表中收集重复对象

问题描述 投票:0回答:1

计算机类{

内部编号;

字符串操作系统名称;

//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”)

请建议最好的方法。

提前致谢。

java stream
1个回答
0
投票

您可以使用

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();
© www.soinside.com 2019 - 2024. All rights reserved.