2011-04-27 16 views
5

¿Hay algún método que hace lo siguiente para mí en una sola toma:¿Hay algún método en la API estándar para retener todo()?

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); 
} 

Como resultado list3 debe contener elementos "E" & "F".

Respuesta

11

qué se refiere?

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

Sin embargo, realizar uniones e intersecciones generalmente se realiza mejor utilizando Conjuntos en lugar de Listas. (Y más eficiente)

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

Sí, que hace el truco! Gracias. ¿Habrá algún efecto adverso si utilizo Listas en lugar de Conjuntos? – pall

+0

Los conjuntos suponen la exclusividad de las entradas e ignoran los duplicados. Las listas están ordenadas y permiten duplicados. Sospecho que quieres lo primero en lugar de lo último. –

1

O con Sets.intersection() de guayaba:

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