2010-07-12 5 views
1

Dans ma liste, je veux ignorer certaines entrées (créer un filtre de liste), par ignorer je veux dire supprimer. Si ma liste contient des éléments A à Z String, disons que je veux supprimer B, F et Z.Comment créer un filtre de liste

Comment le ferais-je avec var args, nombre arbitraire d'éléments à supprimer de la liste?

Merci

Répondre

6

Vous pouvez utiliser List#removeAll().

List<String> alphabet = new ArrayList<String>(); 
alphabet.add("A"); 
alphabet.add("B"); 
alphabet.add("C"); 
alphabet.add("D"); 
alphabet.add("E"); 
alphabet.add("F"); 
alphabet.add("G"); 
// Etc.. 
List<String> toRemove = Arrays.asList("B", "F"); // Takes varargs! 

alphabet.removeAll(toRemove); 

System.out.println(alphabet); // A, C, D, E, G 
+0

ce que sur la construction de l'alphabet avec une nouvelle ArrayList (asList ("A", "B" .. .))? (la copie n'est pas chère), ou si vous pouvez utiliser des listes de goyave.newArrayList ("A", "B", ...) –

+1

@Sylvian: C'est à l'OP. La question n'était pas de construire. Tant que rien n'est explicitement mentionné, l'API Java SE standard est supposée. Certes, la goyave est géniale, mais je ne peux pas répondre à une solution basée sur la goyave du haut de la tête. Vous êtes libre de le faire tant qu'une réponse basée sur l'API Java SE raisonnable est donnée/pointée. L'OP peut avoir des raisons de ne pas utiliser/préférer les API tierces. – BalusC

+0

Ok, je comprends votre point de vue, merci pour l'explication. La prochaine fois que je réponds à la question, je vais d'abord penser à l'API standard (sauf si mentionné) –

1

estimation rapide (en utilisant varargs):

void removeFromList(List<Object> list, Object ... filterElements){ 
    for(Object elm:filterElements){ 
    while(list.remove(elm)); 
    } 
} 
3

En utilisant la goyave

final Iterable<String> filtered = Iterables.removeIf(asList("A","B","C", "Z"), new Predicate<String>(){ 
    public boolean apply(final String element){ 
     // your filter, eg 
     return element.equals("A"); 
    ) 
} 
+0

'contains' devrait être' equal 'en ce qui concerne la question. – whiskeysierra

+0

@Willi: thx, correction effectuée –

Questions connexes