集合的removeAll方法
我想知道下面这样的事情是否可能,
list.removeAll(namesToRemove)
我希望上下文是可以理解的。
list
的类型为 ArrayList
,其中 MyObject
有一个 getName
方法。
namesToRemove
是一个 ArrayList
,其中包含要删除的对象的名称。
我知道这可以通过重写 MyObject 类中的 equals 方法来实现。我想知道是否还有其他选择。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 Google 收藏集
Collections2.filter()
:You can do something like this using Google Collections
Collections2.filter()
:Java 8:
Java 7 及更早版本:
请注意,这两种替代方案都具有二次复杂度。 执行操作使其呈线性,并使用
namesToRemoveSet
而不是namesToRemove
。您可以通过在代码片段之前
Java 8:
Java 7 and older:
Note that both alternatives have quadratic complexity. You can make it linear by doing
before the snippets, and use
namesToRemoveSet
instead ofnamesToRemove
.您不想覆盖 Object 类中的任何内容。您需要使用 过滤器实用程序或使用您自己的语义而不是 equals 的集合,可能是 ForwardingCollection 包含在您自己的 等效。
所有这一切都可以通过 google guava 来实现,而无需违反任何标准
You don't want to override anything in the Object class. You need to use either a filter utility or a collection that uses your own semantics instead of equals, maybe a ForwardingCollection wrapped around your own implementation of equivalence.
All this can be achieved with google guava without breaking any standards
另一种方法:子类
ArrayList
并实现自定义方法,例如:EDIT
更改了代码 - 注释很好,现在自定义列表又是“列表”,但现在我们使用
toString()
方法(为了简单起见)进行过滤。 (可以使用getName()
方法,但需要更多代码行)Another approach: Subclass
ArrayList
and implement a custom method like:EDIT
changed the code - the comment was good, now the custom list is a 'List' again, but now we use the
toString()
method (for simplicity) for filtering. (using agetName()
method is possible but requires more lines of code)