天天看點

使用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添加您的清單中做設定 多重