gpt4 book ai didi

java - 删除具有重复字段值的 entrySet 对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:45 26 4
gpt4 key购买 nike

我有一个 Hashmap<String, List<A>>

目前我从条目列表中筛选出 A.result 为 null 的所有对象

map.entrySet().stream()
.forEach(aList -> aList.getValue().removeIf(a -> a.result == null));

我还需要删除所有具有重复结果字段值的 A 对象

所以如果我有 A1.result = 1A2.result = 1我只想买一个。

编辑:因为没有找到更好的方法,所以将临时解决方案作为答案。

最佳答案

正如 Hemant 在 their comment 中所述, 最好同时覆盖 Object#equalsObject#hashCodeA所以两个对象可以通过它们的 result 进行比较领域:

@Override
public boolean equals(Object o) {
if (!(o instanceof A)) {
return false;
}
return Objects.equals(result, ((A) o).result);
}

@Override
public int hashCode() {
return Objects.hash(result);
}

现在,您只需记忆一下您的 MapMap<String, Set<A>> ,这可以在 Java 10 中通过以下方式完成:

map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> Set.copyOf(e.getValue()))));

在 Java 8 中略有不同:

map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> new HashSet<>(e.getValue())))

关于java - 删除具有重复字段值的 entrySet 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50278554/

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