Søger efter en streng i en ArrayList

1. Oversigt

I denne vejledning ser vi på forskellige måder at søge på Snor i en ArrayList. Vores hensigt er at kontrollere, om en bestemt ikke-tom sekvens af tegn er til stede i et af elementerne i ArrayList og at returnere en liste med alle de matchende elementer.

2. Grundlæggende looping

Lad os først bruge en grundlæggende sløjfe til at søge i rækkefølgen af ​​tegn i den givne søgestreng ved hjælp af indeholder metode til Java's Snor klasse:

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

3. Strømme

Java 8 Streams API giver os en mere kompakt løsning ved hjælp af funktionelle operationer.

Først bruger vi filter() metode til at søge i vores inputliste efter søgestrengen, og derefter bruger vi indsamle metode til at oprette og udfylde en liste, der indeholder de matchende elementer:

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

4. Tredjepartsbiblioteker

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

For at bruge dem skal vi bare tilføje Guava, Commons Collections eller begge afhængigheder i vores pom.xml-fil:

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

4.1. Commons samlinger

Commons Collections giver os en metode IterableUtils.filteredIterable () der matcher det givne Iterabel mod en Prædikat.

Lad os ringe IterableUtils.filteredIterable (), definerer prædikatet for kun at vælge de elementer, der indeholder søgestrengen. Så bruger vi IteratorUtils.toList () at 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 tilbyder en lignende løsning til Apache filteredIterable () med Iterables.filter () metode. Lad os bruge den til at filtrere listen og kun returnere de elementer, der matcher vores søgestreng:

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

5. Konklusion

I denne vejledning har vi lært forskellige måder at søge efter en Snor i en ArrayList. Vi startede først med en simpel til loop og fortsatte derefter med en tilgang ved hjælp af Stream API. Endelig så vi nogle eksempler ved hjælp af to tredjepartsbiblioteker - Google Guava og Commons Collections.

De komplette eksempler er tilgængelige på GitHub.