gpt4 book ai didi

Java - 如何根据自定义比较最好地执行类似集合的操作(例如 retainAll)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:16:38 25 4
gpt4 key购买 nike

我有两组都包含相同的对象类型。我希望能够访问以下内容:

  • 两个集合的交集
  • 集合 1 中包含但不包含在集合 2 中的对象
  • 集合 2 中包含但不包含在集合 1 中的对象

我的问题涉及如何最好地比较两组以获得所需的 View 。所讨论的类具有许多 id 属性,可用于唯一标识该实体。但是,类中还有许多描述对象当前状态的属性。这两个集合可以包含根据 ID 匹配但处于不同状态的对象(因此,并非两个对象之间的所有属性都相等)。

那么 - 我如何最好地实现我的解决方案。为不考虑状态属性且仅查看 id 属性的类实现 equals() 方法似乎与名称“equals”不符,并且稍后可能会造成混淆。有什么方法可以提供一种方法,通过该方法可以对集合方法进行比较吗?

此外,我希望能够在不修改原始集合的情况下访问上述 3 个 View 。

非常感谢所有帮助!

最佳答案

(编辑:正如 Martin Konecny 所指出的,由于 TreeSet 中不幸的实现细节,我的第一个建议已被删除。 一些集合类(例如 TreeSet )允许您提供 Comparator这将用于比较元素,因此您可能希望使用其中一个类 - 至少,如果有一些自然的方式来排序您的对象。 )

如果不是(即,如果很难实现 CompareTo(),而实现 HashCode()Equals() 会更简单),您可以创建一个包装类,通过查看相关的函数来实现这两个功能来自它们包装的对象的字段,并创建一个常规的 HashSet这些包装器对象。

关于Java - 如何根据自定义比较最好地执行类似集合的操作(例如 retainAll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943380/

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