Java 8 Stream在列表中查找与某些属性匹配的对象

时间:2017-11-20 11:09:24

标签: java-8 stream java-stream

我们说我有下一个清单

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流,我想在列表中找到哪些项目具有相同的电话和相同的地址。

我在这个论坛中看到很多解决方案可以减少仅按一个属性过滤的列表,但我需要匹配两个或多个属性

1 个答案:

答案 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();
                    }));