Търсене на низ в ArrayList

1. Общ преглед

В този урок ще разгледаме различни начини за търсене на String в ArrayList . Нашето намерение е да проверим дали в някой от елементите в ArrayList присъства конкретна непразна последователност от символи и да върнем списък с всички съответстващи елементи.

2. Основен цикъл

Първо, нека използваме основен цикъл, за да търсим последователността от символи в дадения низ за търсене, използвайки метода contains на класа String на 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. Потоци

API на Java 8 Streams ни предоставя по-компактно решение, като използва функционални операции.

Първо ще използваме метода filter () , за да търсим в нашия входен списък за низ за търсене, а след това ще използваме метода collect , за да създадем и попълним списък, съдържащ съответстващите елементи:

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

4. Библиотеки на трети страни

Ако не можем да използваме Java 8 Stream API, можем да разгледаме библиотеки на трети страни като Commons Collections и Google Guava.

За да ги използваме, просто трябва да добавим Guava, Commons Collections или и двете зависимости в нашия файл pom.xml:

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

4.1. Общи колекции

Commons Collections ни предоставя метод IterableUtils.filteredIterable (), който съответства на дадения Iterable срещу предикат .

Нека извикаме IterableUtils.filteredIterable () , дефинирайки предиката да избира само тези елементи, съдържащи низа за търсене. След това ще използваме IteratorUtils.toList (), за да преобразуваме Iterable в списък :

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 Гуава

Google Guava предлага подобно решение да на Apache filteredIterable () с Iterables.filter () метод. Нека го използваме, за да филтрираме списъка и да върнем само елементите, съответстващи на нашия низ за търсене:

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

5. Заключение

В този урок научихме различни начини за търсене на String в ArrayList. Първо започнахме с обикновен цикъл for и след това продължихме с подход, използвайки Stream API. И накрая, видяхме няколко примера, използващи две библиотеки на трети страни - Google Guava и Commons Collections .

Пълните примери са достъпни в GitHub.