【发布时间】:2019-08-23 07:07:55
【问题描述】:
我有 2 个列表。要求是根据条件过滤掉list1中不在list2中的元素。
Class Fighter
{
String name;
String address;
}
List<Fighter> pairs1 = new ArrayList();
pairs1.add(new Fighter("a", "a"));
pairs1.add(new Fighter("b", "a"));
List<Fighter> pairs2 = new ArrayList();
pairs2.add(new Fighter("a", "c"));
pairs2.add(new Fighter("a", "d"));
Set<Fighter> finalValues = new HashSet<>();
finalValues = pairs1.stream().filter(firstList ->
pairs2.stream().noneMatch(secondList ->
firstList.getName().equals(secondList.getName())
&& firstList.getName().equals(secondList.getName()))).collect(Collectors.toSet());
System.out.println(finalValues);
预期输出:a=a, b=a
解释:list1 中的元素不在 list2 中
上面的代码没有给出预期的输出。请让我知道如何更正上述流代码以获得输出
【问题讨论】:
-
最简单的方法是实现一个包含两个属性的
equals(带有hashcode),然后在另一个列表中简单地执行contains。同样在当前上下文中noneMatch(secondList -> firstList.getName().equals(secondList.getName()) && firstList.getAddress().equals(secondList.getAddress()))应该修复它。
标签: java lambda java-8 java-stream