Zoeken naar een tekenreeks in een ArrayList

1. Overzicht

In deze tutorial zullen we kijken naar verschillende manieren om te zoeken naar een Draad in een ArrayList. Het is onze bedoeling om te controleren of een specifieke niet-lege reeks tekens aanwezig is in een van de elementen in het ArrayList en om een ​​lijst met alle overeenkomende elementen te retourneren.

2. Basis looping

Laten we eerst een basislus gebruiken om de reeks tekens in de opgegeven zoekreeks te doorzoeken met behulp van de bevat methode van Java's Draad klasse:

openbare lijst findUsingLoop (String zoeken, lijstlijst) {lijst overeenkomsten = nieuwe ArrayList (); for (String str: lijst) {if (str.contains (zoeken)) {matches.add (str); }} terugkeerovereenkomsten; } 

3. Streams

De Java 8 Streams API biedt ons een compactere oplossing door middel van functionele bewerkingen.

Eerst gebruiken we de filter() methode om in onze invoerlijst naar de zoekreeks te zoeken, en dan gebruiken we de verzamelen methode om een ​​lijst met de overeenkomende elementen te maken en te vullen:

openbare lijst findUsingStream (String zoeken, lijstlijst) {List matchingElements = list.stream () .filter (str -> str.trim (). bevat (zoeken)) .collect (Collectors.toList ()); matchingElements retourneren; }

4. Bibliotheken van derden

Als we de Java 8 Stream API niet kunnen gebruiken, kunnen we kijken naar bibliotheken van derden, zoals Commons Collections en Google Guava.

Om ze te gebruiken, hoeven we alleen Guava, Commons Collections of beide afhankelijkheden toe te voegen aan ons pom.xml-bestand:

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

4.1. Commons Collecties

Commons Collections biedt ons een methode IterableUtils.filteredIterable () die overeenkomt met het gegeven Herhaalbaar tegen een Predikaat.

Laten we bellen IterableUtils.filteredIterable (), waarbij het predikaat wordt gedefinieerd om alleen die elementen te selecteren die de zoekreeks bevatten. Dan gebruiken we IteratorUtils.toList () om het Herhaalbaar naar een Lijst:

openbare lijst findUsingCommonsCollection (String zoeken, lijstlijst) {Iterable resultaat = IterableUtils.filteredIterable (lijst, nieuw predikaat () {openbare boolean evalueren (String listElement) {return listElement.contains (zoeken);}}); retourneer IteratorUtils.toList (result.iterator ()); } 

4.2. Google Guava

Google Guava biedt een vergelijkbare oplossing als die van Apache gefilterdIterable () met de Iterables.filter () methode. Laten we het gebruiken om de lijst te filteren en alleen de elementen te retourneren die overeenkomen met onze zoekreeks:

openbare lijst findUsingGuava (String zoeken, lijstlijst) {Herhaalbaar resultaat = Iterables.filter (lijst, Predicates.containsPattern (zoeken)); return Lists.newArrayList (result.iterator ()); }

5. Conclusie

In deze training hebben we verschillende manieren geleerd om naar een Draad in een ArrayList. We zijn eerst begonnen met een eenvoudig voor loop en ging vervolgens verder met een aanpak met behulp van de Stream API. Ten slotte zagen we enkele voorbeelden met behulp van twee bibliotheken van derden: Google Guava en Commons Collections.

De volledige voorbeelden zijn beschikbaar op GitHub.


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