标准API中是否有任何方法可以反转retainAll()?

时间:2011-04-27 07:07:45

标签: java api list collections arraylist

是否有任何方法可以一次性完成以下任务:

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”&amp; “F”。

2 个答案:

答案 0 :(得分:12)

你的意思是?

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

但是,做联合和交叉通常最好使用集而不是列表来完成。 (并且更有效率)

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

答案 1 :(得分:1)

或者使用番石榴的Sets.intersection()

Lists.newArrayList(Sets.intersection(ImmutableSet.of(list1), ImmutableList.of(list2)));