Ricerca di una stringa in un ArrayList

1. Panoramica

In questo tutorial, esamineremo diversi modi per cercare una stringa in un ArrayList . Il nostro intento è verificare se una specifica sequenza di caratteri non vuota è presente in uno qualsiasi degli elementi nell'ArrayList e restituire un elenco con tutti gli elementi corrispondenti.

2. Looping di base

Innanzitutto, usiamo un ciclo di base per cercare la sequenza di caratteri nella stringa di ricerca data utilizzando il metodo contiene della classe String di Java :

public List findUsingLoop(String search, List list) { List matches = new ArrayList(); for(String str: list) { if (str.contains(search)) { matches.add(str); } } return matches; } 

3. Flussi

L'API Java 8 Streams ci fornisce una soluzione più compatta utilizzando operazioni funzionali.

Innanzitutto, utilizzeremo il metodo filter () per cercare la stringa di ricerca nel nostro elenco di input, quindi utilizzeremo il metodo collect per creare e popolare un elenco contenente gli elementi corrispondenti:

public List findUsingStream(String search, List list) { List matchingElements = list.stream() .filter(str -> str.trim().contains(search)) .collect(Collectors.toList()); return matchingElements; }

4. Biblioteche di terze parti

Se non possiamo utilizzare l'API Java 8 Stream, possiamo esaminare le librerie di terze parti come Commons Collections e Google Guava.

Per usarli, dobbiamo solo aggiungere Guava, Commons Collections o entrambe le dipendenze nel nostro file pom.xml:

 com.google.guava guava 23.0   org.apache.commons commons-collections4 4.1 

4.1. Collezioni dei comuni

Commons Collections ci fornisce un metodo IterableUtils.filteredIterable () che confronta il dato Iterable con un Predicate .

Chiamiamo IterableUtils.filteredIterable () , definendo il predicato per selezionare solo quegli elementi che contengono la stringa di ricerca. Quindi, useremo IteratorUtils.toList () per convertire Iterable in un List :

public List findUsingCommonsCollection(String search, List list) { Iterable result = IterableUtils.filteredIterable(list, new Predicate() { public boolean evaluate(String listElement) { return listElement.contains(search); } }); return IteratorUtils.toList(result.iterator()); } 

4.2. Google Guava

Google Guava offre una soluzione simile a filteredIterable () di Apache con il metodo Iterables.filter () . Usiamolo per filtrare l'elenco e restituire solo gli elementi che corrispondono alla nostra stringa di ricerca:

public List findUsingGuava(String search, List list) { Iterable result = Iterables.filter(list, Predicates.containsPattern(search)); return Lists.newArrayList(result.iterator()); }

5. conclusione

In questo tutorial, abbiamo imparato diversi modi per cercare una stringa in un ArrayList. Abbiamo prima iniziato con un semplice ciclo for e poi abbiamo proceduto con un approccio utilizzando l'API Stream. Infine, abbiamo visto alcuni esempi utilizzando due librerie di terze parti: Google Guava e Commons Collections .

Gli esempi completi sono disponibili su GitHub.