比较两个对象列表并通过比较Java 8中两个列表的一个属性来形成一个新列表

时间:2019-04-11 10:05:58

标签: java list java-stream

我有两个对象列表。这些对象列表具有共同的属性(例如ID)。我想检查属性值是否;即;第一个列表和第二个列表的id相等,如果相等,则使用Java 8中仅具有相同属性值的对象创建一个新列表。

我尝试使用两个for循环。但我想在Java 8中有解决方案

2 个答案:

答案 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)

你明白了要点。