2012-03-26 20 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); 
     } 
    } 

ho una lista di stringhe, voglio filtrarlo dalla stringa specificata in modo che il valore restituito contiene un elenco dei soli stringhe specificate. Stavo per usare un predicato come sopra, ma non è sicuro come applicare questo per filtrare un elencoCome filtrare lista usando predicato

+0

Dai un'occhiata a questo [SO queston] (http://stackoverflow.com/questions/587404/java-finding-objects-in-collections) - sembra esattamente quello che stai cercando. – Attila

+1

stai usando 'Guava' o' org.apache.commons.collections.Predicate'? – phanneman

risposta

10

Suppongo che lo Predicate sia da Guava? Se è così, si potrebbe usare Iterables.filter:

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

poi costruire un elenco dal che se si voleva:

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

... ma mi piacerebbe solo suggeriscono copiandolo in un'altra lista, se si in realtà lo voglio come una lista. Se hai intenzione di iterare su di esso (e solo una volta), segui l'iterabile.

4

ne dite di usare il metodo filter di Guava o il metodo filter Apache Commons'? Il metodo di Guava restituisce una vista della collezione, mentre Apache Commons 'modifica la raccolta sul posto. Non reinventare la ruota!

+2

Per chiarire, il metodo di Guava restituisce un _view_, che è una sorta di nuova collezione, ma non esegue esplicitamente la costruzione. –

+0

@LouisWasserman grazie per il chiarimento, ho modificato la mia risposta. –

Problemi correlati