如何对两个对象使用Collections方法(removeAll()和retainAll())。(对象是父子关系)

如何对两个对象使用Collections方法(removeAll()和retainAll())。(对象是父子关系),第1张

如何对两个对象使用Collections方法(removeAll()和retainAll())。(对象是父子关系)

Java集合依赖于

equals
hashCode
方法(
HashMap
,,
HashSet
s和其他方法使用后者)。

如果你希望能够使用Java集合的数据结构的能力(如

removeAll
retainAll
等),你需要用正确的实现提供对象
equals
hashCode

如果您不能修改

Item
该类,则可以使用自己的实现编写包装类
equals

public class ItemWrapper {    private final Item item;    public ItemWrapper(Item item) {        this.item = item;    }    public Item getItem() {        return item;    }    @Override    public boolean equals(Object obj) {        return obj instanceof ItemWrapper && item.getId().equals(((ItemWrapper) obj).item.getId());    }    @Override    public int hashCode() {        return item.getId().hashCode();    }}

ItemWrapper
为每个原始文件创建一个新文件
Item
,将
ItemWrapper
s
存储在Java集合中,并使用所需的方法(
removeAll
/
retainAll
)。然后遍历结果集合,并
Item
通过调用each
ItemWrapper
getItem()
方法来检索。

您的另一个选择是subclass

ArrayList
,但这似乎是一个更复杂的解决方案。

还有一种选择是不将Java集合用于删除/保留逻辑,而是自己实现它们。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5490517.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存