我们说我有下一个清单
List<MyData> list = new ArrayList<>();
list.add(new MyData("id1", "name1", "secondName1", "phone1", "address1");
list.add(new MyData("id2", "name2", "secondName1", "phone2", "address2");
list.add(new MyData("id3", "name3", "secondName3", "phone1", "address1");
list.add(new MyData("id4", "name4", "secondName4", "phone4", "address4");
使用Java8流,我想在列表中找到哪些项目具有相同的电话和相同的地址。
我在这个论坛中看到很多解决方案可以减少仅按一个属性过滤的列表,但我需要匹配两个或多个属性。
答案 0 :(得分:4)
你可以这样做:
list.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(
x -> Arrays.asList(x.getPhone(), x.getAddress()),
HashMap::new,
Collectors.toList()),
map -> {
map.values().removeIf(x -> x.size() == 1);
return map.values();
}));