天天看点

使用guava从列表中删除重复

我们怎样才能删除重复项从列表与guavaAPI的帮助? 目前,我下面这个:

本文地址 :CodeGo.net/499388/ 

------------------------------------------------------------------------------------------------------------------------- 

1. 可能是最有效的方法是<code>ImmutableSet.copyOf(list).asList()</code>,从而消除了重复和保留的迭代顺序。 (但你与<code>LinkedHashSet</code>是几乎一样有效,并且不会扔了空值上,在你真正想要的空值在您的收藏万一。) 

2. 我喜欢为它的简单性。路易斯的答案(而且不需要2全迭代唯一的答案),但不幸的是在现实世界中,你经常会遇到的情况,其中<code>null</code>确实发生。这里有一个稍长空安全的版本:

或者 CodeGo.net,用静态导入:

当然,你需要知道的事实,即所有<code>null</code>值将被从列表中丢失。 

3. 如果您guava不惜任何代价,你可以做

4. 我真的不使用<code>(Linked)HashMultiSet</code>做任务,以完成<code>ArrayList</code>和<code>(Linked)HashSet</code>像上面-它的可读性变差的普通Java和(可能)效率较低。 相反,在静态工厂构造函数,例如<code>newArrayList</code>和<code>newLinkedHashSet</code>要避免所有这些<code>&lt;T&gt;</code>S:

但是,你能做到的更多的“guava路”-通过避免空值不可变集合。 所以,如果你的收藏不能有空我会一成不变的设置,而不是可变的,低效率的一种:

它仍然复制对象的两倍,因此考虑是完全不可改变的,签名的回报<code>ImmutableList</code>:

这种方式有参与只有一个拷贝,<code>ImmutableCollection.asList()</code>返回一个视图。 

5. 你可以尝试guava的多重API来删除duplicates.Just添加您的列表中做设置 多重