【发布时间】:2023-04-08 16:29:01
【问题描述】:
假设我有下一个列表
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 流,我想在我的列表中查找哪些项目具有相同的电话和相同的地址。
我在这个论坛上看到了很多解决方案,可以减少仅按一个属性过滤列表,但我需要匹配两个或更多属性。
【问题讨论】:
-
为什么您认为按不同数量的属性进行过滤会使您的问题有所不同?
-
我发现的一些解决方案是按一个属性收集分组,或者使用辅助
Set,将要匹配的属性作为键,将对象作为值。一旦我拥有多个财产,我就无法使用这些解决方案。 -
如果要分组,则需要一个复合属性,其余的都一样。
-
列表是穷人的复合类。它正确地实现了 equals() 和 hashCode()。但是定义一个真正的 ContactInformation 类(包含电话和地址)并按 ContactInformation 分组要简洁得多。
-
我已经回答了这个问题。使用 List 按顺序存储属性值。
标签: java-8 stream java-stream