Suchen nach einem String in einer ArrayList

1. Übersicht

In diesem Tutorial werden verschiedene Möglichkeiten zur Suche nach einem String in einer ArrayList untersucht . Wir möchten überprüfen, ob in einem der Elemente in der ArrayList eine bestimmte nicht leere Zeichenfolge vorhanden ist, und eine Liste mit allen übereinstimmenden Elementen zurückgeben.

2. Grundlegendes Looping

Erstens verwenden sie eine grundlegende Schleife die Folge von Zeichen in dem angegebenen Suchbegriff zu suchen , indem die enthält Methode von 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); } } return matches; } 

3. Streams

Die Java 8 Streams-API bietet uns eine kompaktere Lösung mithilfe funktionaler Operationen.

Zuerst verwenden wir die filter () -Methode, um unsere Eingabeliste nach der Suchzeichenfolge zu durchsuchen, und dann verwenden wir die collect- Methode, um eine Liste mit den übereinstimmenden Elementen zu erstellen und zu füllen:

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

4. Bibliotheken von Drittanbietern

Wenn wir die Java 8 Stream-API nicht verwenden können, können wir Bibliotheken von Drittanbietern wie Commons Collections und Google Guava anzeigen.

Um sie zu verwenden, müssen wir nur Guava, Commons Collections oder beide Abhängigkeiten in unsere Datei pom.xml einfügen:

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

4.1. Commons-Sammlungen

Commons Collections bietet uns eine Methode IterableUtils.filteredIterable () , die die angegebene Iterable mit einem Prädikat vergleicht .

Rufen wir IterableUtils.filteredIterable () auf und definieren das Prädikat, um nur die Elemente auszuwählen, die die Suchzeichenfolge enthalten. Dann verwenden wir IteratorUtils.toList () , um die Iterable in eine Liste zu konvertieren :

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 bietet eine ähnliche Lösung wie Apache's filteredIterable () mit der Iterables.filter () -Methode. Verwenden wir es, um die Liste zu filtern und nur die Elemente zurückzugeben, die unserer Suchzeichenfolge entsprechen:

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

5. Schlussfolgerung

In diesem Tutorial haben wir verschiedene Methoden zum Suchen nach einem String in einer ArrayList kennengelernt. Wir haben zuerst mit einer einfachen for- Schleife begonnen und dann mit einem Ansatz unter Verwendung der Stream-API fortgefahren. Schließlich haben wir einige Beispiele mit zwei Bibliotheken von Drittanbietern gesehen - Google Guava und Commons Collections .

Die vollständigen Beispiele finden Sie auf GitHub.