Spa*_*key 2 java intersection list java-8 java-stream
如果我有两个对象列表,则可以找到以下交集:
public class MyObject {
String id;
String someField;
String someOtherField;
}
List<MyObject> list1;
List<MyObject> list2;
List<MyObject> intersect = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
有类似的方法可以根据的id场找到交点MyObject吗?我无法覆盖equals方法。
与上述Eran的答案类似,但也许可以稍微提高效率,您可以先将ID拉出到单独的Set中:
Set<String> ids = list2.stream().map(obj -> obj.id).collect(Collectors.toSet());
List<MyObject> intersect = list1.stream()
.filter(obj -> ids.contains(obj.id))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
之所以会更高效,是因为list1您可以为其中的每个项目确定ID是否list2在O(1)时间内,因此总体而言,您的运行时为O(list1 + list2)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |