2012-03-26 18 views
7
private static class FilterByStringContains implements Predicate<String> { 
     private String filterString; 
     private FilterByStringContains(final String filterString) { 
      this.filterString = filterString; 
     } 
     @Override 
     public boolean apply(final String string) { 
      return string.contains(filterString); 
     } 
    } 

Tengo una lista de cadenas, quiero filtrarla por la cadena especificada para que el valor devuelto contenga una lista de solo las cadenas especificadas. Iba a usar un predicado como el anterior pero no estoy seguro de cómo aplicar esto para filtrar una listaCómo filtrar la lista usando Predicado

+0

Mira esto [SO queston] (http://stackoverflow.com/questions/587404/java-finding-objects-in-collections) - suena exactamente como lo que buscas. – Attila

+1

¿Estás usando 'Guava' o' org.apache.commons.collections.Predicate'? – phanneman

Respuesta

10

Asumo la Predicate aquí es de Guava? Si es así, usted podría utilizar Iterables.filter:

Iterable<String> filtered = Iterables.filter(original, predicate); 

luego construir una lista de que si se quería:

List<String> filteredCopy = Lists.newArrayList(filtered); 

... pero me única sugieren lo copia a otra lista si en realidad lo quiero como una lista. Si vas a iterar sobre él (y solo una vez), mantente sujeto a iterable.

4

¿Qué tal si usamos el método filter de Guava o el método filter de Apache commons? El método de Guava devuelve una vista de la colección, mientras que Apache Commons 'modifica la colección in situ. ¡No reinventes la rueda!

+2

Para aclarar, el método de Guava devuelve _view_, que es una especie de colección nueva, pero no hace explícitamente la construcción. –

+0

@LouisWasserman gracias por la aclaración, edité mi respuesta. –

Cuestiones relacionadas