gpt4 book ai didi

java - 使用 java 8 查找列表中不存在于另一个列表中的元素

转载 作者:行者123 更新时间:2023-11-30 07:40:35 27 4
gpt4 key购买 nike

我有 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 中

上面的代码没有给出预期的输出。请让我知道如何更正上述流代码以获得输出

最佳答案

首先重写 Fighter 类中的 equals 和 hashcode 方法。

@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Fighter))
return false;
Fighter f = (Fighter) o;
return f.name.equals(name) && f.address.equals(address);
}

@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + address.hashCode();
return result;
}

然后从 pairs2 创建一个 Set。最后使用它的 contains 方法来获取集合差异。这是它的样子,

Set<Fighter> pairs2Set = new HashSet<>(pairs2);
Set<Fighter> setDiff = pairs1.stream()
.filter(f -> !pairs2Set.contains(f))
.collect(Collectors.toSet());

关于java - 使用 java 8 查找列表中不存在于另一个列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57621371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com