2011-04-27 32 views
5

是否有這確實爲我下面的一次性任何方法:標準API中是否存在反向retainAll()的方法?

List<String> list1 = new ArrayList<String>(Arrays.asList("A","B","C","D")); 
List<String> list2 = new ArrayList<String>(Arrays.asList("B","C","E","F")); 
List<String> list3 = new ArrayList<String>(); 
for(String element : list2){ 
    if(!list1.contains(element)) 
    list3.add(element); 
} 

結果項目list3應該包含的元素「E」 &「F」。

回答

11

你的意思是?

List<String> list3 = new ArrayList<String>(list2); 
list3.removeAll(list1); 

但是,做聯合和交叉通常最好使用集合而不是列表完成。 (和更有效地)

Set<String> set3 = new LinkedHashSet<String>(set2); 
set3.removeAll(set1); 
+0

是的,這做的伎倆!謝謝。如果我使用列表而不是集合,會不會有任何不利影響? – pall 2011-04-27 07:19:10

+0

集合假設條目的唯一性並忽略重複項。列表是有序的,並允許重複。我懷疑你想要的是前者而不是後者。 – 2011-04-27 07:20:40

1

或用番石榴的Sets.intersection()

Lists.newArrayList(Sets.intersection(ImmutableSet.of(list1), ImmutableList.of(list2))); 
相關問題