2012-02-13 26 views
3

我有一種情況,我想從集合(列表)刪除重複,然後加入他們。 我想爲Joiner做一個擴展,但這是不可能的,因爲所有的構造函數都是私有的。木匠 - skipDuplicates

下面是我們做什麼的代碼片段:

Collection<String> tokens = newArrayList(); 
for (int i = 0; i < numOfFoundTitles; i++) { 
    if (!tokens.contains(titlesInRange.get(i).titleAsTokens)) { 
     tokens.add(titlesInRange.get(i).getTitleAsTokens()); 
    } 
} 
return titleTokensJoiner.join(tokens); 

有什麼建議? 我曾想過函數/謂詞,但它們並不適合那裏。

感謝

的Eyal

回答

9
return titleTokensJoiner.join(ImmutableSet.copyOf(tokens)); 

短,甜的,正確的。 ImmutableSet保留原始輸入的順序,但忽略首次出現後重復出現的元素。

+0

哇!謝謝。只有copyOf是標記而不是titlesInRange :)(複製過去 - >失敗測試) – 2012-02-13 18:39:33

+0

...不,這個應該可以工作,而且根本不應該創建'tokens',更不用說將它複製到'ImmutableSet '。你能描述一下失敗的測試嗎? – 2012-02-13 18:40:35

+0

titlesInRange不是字符串。我沒有顯示所有的代碼。這裏是:private String createTokensString(List titlesInRange){num0fFoundTitles = Math.min(numberOfTitlesToTokenize,titlesInRange.size()); 集合 tokens = newArrayList(); (int i = 0; i 2012-02-13 18:42:40