Søker etter en streng i en ArrayList

1. Oversikt

I denne opplæringen vil vi se på forskjellige måter å søke etter en String i en ArrayList. Vår hensikt er å sjekke om en spesifikk ikke-tom sekvens av tegn er tilstede i noen av elementene i ArrayList og å returnere en liste med alle samsvarende elementer.

2. Grunnleggende looping

La oss først bruke en grunnleggende sløyfe for å søke i rekkefølgen av tegn i den gitte søkestrengen ved hjelp av inneholder metoden til Java String klasse:

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

3. Strømmer

Java 8 Streams API gir oss en mer kompakt løsning ved å bruke funksjonelle operasjoner.

Først bruker vi filter() metode for å søke i inngangslisten vår etter søkestrengen, og deretter bruker vi samle inn metode for å opprette og fylle ut en liste som inneholder de samsvarende elementene:

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

4. Tredjepartsbiblioteker

Hvis vi ikke kan bruke Java 8 Stream API, kan vi se på tredjepartsbiblioteker som Commons Collections og Google Guava.

For å bruke dem, trenger vi bare å legge til Guava, Commons Collections eller begge avhengigheter i pom.xml-filen:

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

4.1. Commons samlinger

Commons Collections gir oss en metode IterableUtils.filteredIterable () som samsvarer med det gitte Iterabel mot en Predikere.

La oss ringe IterableUtils.filteredIterable (), definerer predikatet for å bare velge de elementene som inneholder søkestrengen. Så bruker vi IteratorUtils.toList () å konvertere Iterabel til en Liste:

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

4.2. Google Guava

Google Guava tilbyr en lignende løsning som Apache filteredIterable () med Iterables.filter () metode. La oss bruke den til å filtrere listen og returnere bare elementene som samsvarer med søkestrengen:

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

5. Konklusjon

I denne veiledningen har vi lært forskjellige måter å søke etter en String i en ArrayList. Vi startet først med en enkel til loop og fortsatte deretter med en tilnærming ved hjelp av Stream API. Til slutt så vi noen eksempler ved bruk av to tredjepartsbiblioteker - Google Guava og Commons Collections.

De komplette eksemplene er tilgjengelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found