我有两个对象列表。这些对象列表具有共同的属性(例如ID)。我想检查属性值是否;即;第一个列表和第二个列表的id相等,如果相等,则使用Java 8中仅具有相同属性值的对象创建一个新列表。
我尝试使用两个for循环。但我想在Java 8中有解决方案
答案 0 :(得分:0)
这是一种可能的解决方案。 (未经测试。)
假定列表是随机访问且长度相同,并且列表元素或属性都不为null
:
List<SomeType> list1 = ...
List<SomeType> list2 = ...
List<SomeType> res =
IntStream.range(0, list1.size())
.filter(i -> list1.get(i).getSomeProp().equals(list2.get(i).getSomeProp()))
.map(i -> list1.get(i))
.Collectors.toList();
(如果列表不是随机访问的,也可以使用O(N^2)
。)
答案 1 :(得分:0)
保存第一个列表类型时,您想要列表的交集。
获取Set中的公共字段值。
valuesToCheck=secondList.stream().map(SecondListObject::commonFiled).collect(Collectors.toList);
'''
在基于上一步构建的集合中匹配的公共字段值进行过滤的同时,首先应用流。
firstList.stream().filter(x->valuesToCheck.contains(x.getCommonFiled)).collect(toList)
你明白了要点。