我试图从基于两个属性的对象列表中删除重复项,这个问题类似于下面的链接,但我试图使用 java 8 功能基于两个属性找到唯一性。
示例:我有自定义对象,其中两个属性一起构成唯一条目
说列出客户
客户姓名和出生日期一起构成唯一的条目。
使用两个属性的谓词来识别区别的任何解决方案。 就像下面的链接一样,他们对一处特性有解决方案。 Java 8 Distinct by property
类似问题:
Remove duplicates from a list of objects based on property in Java 8
最佳答案
This answer链接问题的已经指向一个可行的解决方案,因为您可以轻松使用包含所有属性值作为键的 List
,例如
HashSet<Object> seen=new HashSet<>();
customers.removeIf(c -> !seen.add(Arrays.asList(c.getName(), c.getDayOfBirth())));
如果这些属性永远不为 null
,您可以使用 Java 9 的 List.of
而不是 Arrays.asList
,后者可能更高效。
如果您希望 Stream 解决方案创建新的 List
,您可以使用
List<Customer> distinctCustomers = customers.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(c -> Arrays.asList(c.getName(), c.getDayOfBirth()),
Function.identity(), (a,b) -> a, LinkedHashMap::new),
m -> new ArrayList<>(m.values())));
关于java - java 8中基于多个属性从对象列表中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48563377/