Come è possibile filtrare qualcosa da un ArrayList di Java come se si dispone di:ArrayList filtro
- Come stai
- Come va
- Joe
- Mike
E il filtro è "Come" rimuoverà Joe e Mike.
Come è possibile filtrare qualcosa da un ArrayList di Java come se si dispone di:ArrayList filtro
E il filtro è "Come" rimuoverà Joe e Mike.
Probabilmente il modo migliore è quello di utilizzare Guava
List<String> list = new ArrayList<String>();
list.add("How are you");
list.add("How you doing");
list.add("Joe");
list.add("Mike");
Collection<String> filtered = Collections2.filter(list,
Predicates.containsPattern("How"));
print(filtered);
stampe
How are you
How you doing
Nel caso in cui si desidera ottenere la raccolta filtrato come una lista, è possibile utilizzare questo (anche da Guava):
List<String> filteredList = Lists.newArrayList(Collections2.filter(
list, Predicates.containsPattern("How")));
Qual è il 2 in Collections2? –
@ DavoudTaghawi-Nejad Probabilmente è perché esiste già la classe 'Collections' in Java standard. Quindi è chiaro quale classe è quella e non è necessario utilizzare un nome completo per distinguerli nel caso in cui vengano utilizzati in una classe. – user219882
il suo errore di assegnazione su Predicati come Predicato non può essere risolto in Android .. – karan421
Dato che non ci hai fornito molte informazioni, suppongo che la lingua in cui scrivi il codice sia C#. Prima di tutto: Preferisci System.Collections.Generic.List su ArrayList. In secondo luogo: un modo sarebbe quello di scorrere tutti gli elementi nell'elenco e controllare se contiene "come". Un altro modo sarebbe usare LINQ. Ecco un rapido esempio che filtra ogni elemento che non contiene "Come":
var list = new List<string>();
list.AddRange(new string[] {
"How are you?",
"How you doing?",
"Joe",
"Mike", });
foreach (string str in list.Where(s => s.Contains("How")))
{
Console.WriteLine(str);
}
Console.ReadLine();
"Dato che non ci hai dato molte informazioni", ma ci sono le tue informazioni, il post è stato taggato su Java. –
@NeonWarge controlla la cronologia di modifica ... http://stackoverflow.com/posts/9146224/revisions Il tag "Java" è stato aggiunto più tardi dopo questa risposta. –
scorrere l'elenco e verificare se contiene la stringa "come" e se lo fa quindi rimuovere. È possibile utilizzare il codice seguente:
// need to construct a new ArrayList otherwise remove operation will not be supported
List<String> list = new ArrayList<String>(Arrays.asList(new String[]
{"How are you?", "How you doing?","Joe", "Mike"}));
System.out.println("List Before: " + list);
for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
}
System.out.println("List After: " + list);
USCITA:
List Before: [How are you?, How you doing?, Joe, Mike]
List After: [How are you?, How you doing?]
Che cosa restituisce la prima volta che viene restituito? – ArtOfWarfare
Chiamare 'it.next()' la prima volta restituisce il primo elemento dalla collezione (lista). – anubhava
Mi piace questo dato che è il più semplice senza coinvolgere librerie di terze parti. – Christopher
Sono d'accordo con una risposta precedente che Google Guava è probabilmente aiutando molto qui, leggibilità-saggio:
final Iterables.removeIf(list, new Predicate<String>() {
@Override
public boolean apply(String input) {
if(input.contains("How")) { //or more complex pattern matching
return true;
}
return false;
}
});
prega di notare che questo è fondamentalmente un duplicato di Guava - How to remove from a list, based on a predicate, keeping track of what was removed?
scrivere il vostro sé una funzione di filtro
public List<T> filter(Predicate<T> criteria, List<T> list) {
return list.stream().filter(criteria).collect(Collectors.<T>toList());
}
e quindi utilizzare
list = new Test().filter(x -> x > 2, list);
Questa è la versione più pulito in Java, ma ha bisogno di JDK 1.8 per supportare lambda calcolo
Questo potrebbe aiutare http: // StackOverflow.it/questions/122105/java-what-is-the-best-way-to-filter-a-collection –
La soluzione migliore sarebbe utilizzare un'altra struttura di raccolta dati invece di un arraylist: http://code.google. com/p/google-collections/ –