我试图从基于两个属性的对象列表中删除重复项,这个问题类似于下面的链接,但是我试图使用Java 8功能基于两个属性找到唯一性。
示例:我有一个自定义对象,其中两个属性一起构成唯一的条目
说列出客户
customerName和DOB一起进行唯一输入。
使用两个属性的谓词来识别区别的任何解决方案。像下面的链接,他们对一个属性有解决方案。 Java 8按属性区分
类似的问题:
链接问题的这个答案已经指向了一个可行的解决方案,因为您可以轻松地使用List包含所有属性值作为键,例如
HashSet<Object> seen=new HashSet<>();
customers.removeIf(c -> !seen.add(Arrays.asList(c.getName(), c.getDayOfBirth())));
Run Code Online (Sandbox Code Playgroud)
如果这些属性从不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())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7538 次 |
| 最近记录: |