Автор оригинала: Caroline Sciberras.
1. Обзор
В этом учебнике, мы будем смотреть на различные способы поиска Струнные в ArrayList . Наша цель состоит в том, чтобы проверить, присутствует ли определенная непустая последовательность символов в любом из элементов в ArrayList и вернуть список со всеми соответствующими элементами.
2. Основные петли
Во-первых, давайте использовать базовый цикл для поиска последовательности символов в данной строке поиска с помощью содержит метод Java Струнные класс:
public ListfindUsingLoop(String search, List list) { List matches = new ArrayList (); for(String str: list) { if (str.contains(search)) { matches.add(str); } } return matches; }
3. Потоки
тем Java 8 Потоки API предоставляет нам более компактное решение с помощью функциональных операций.
Во-первых, мы будем использовать фильтр () метод поиска нашего списка входов для строки поиска, а затем, мы будем использовать собирать метод создания и заполнения списка, содержащего соответствующие элементы:
public ListfindUsingStream(String search, List list) { List matchingElements = list.stream() .filter(str -> str.trim().contains(search)) .collect(Collectors.toList()); return matchingElements; }
4. Библиотеки третьих сторон
Если мы не можем использовать API Java 8 Stream, мы можем посмотреть на сторонние библиотеки, такие как Commons Collections и Google Guava.
Чтобы использовать их, нам просто нужно добавить Гуава , Общие коллекции , или обе зависимости в нашем .xml пом:
com.google.guava guava 23.0 org.apache.commons commons-collections4 4.1
4.1. Коллекции Викисклада
Commons Collections предоставляет нам метод IterableUtils.filteredIterable () который соответствует данному Итерируемые против Предикат .
Давай позвоним IterableUtils.filteredIterable () , определяя предикат, чтобы выбрать только те элементы, содержащие строку поиска. Тогда мы будем использовать ИтераторУтилс.toList () для преобразования Итерируемые к Список :
public ListfindUsingCommonsCollection(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 предлагает аналогичное решение для фильтруется () с Итерируемые.фильтр () метод. Давайте использовать его для фильтрации списка и вернуть только элементы, соответствующие нашей строке поиска:
public ListfindUsingGuava(String search, List list) { Iterable result = Iterables.filter(list, Predicates.containsPattern(search)); return Lists.newArrayList(result.iterator()); }
5. Заключение
В этом учебнике мы изучили различные способы поиска Струнные в ArrayList. Мы начали с простого для цикл, а затем приступил к подходу с использованием API потока. Наконец, мы видели несколько примеров использования двух сторонних библиотек – Google Guava и Commons Collections .
Полные примеры доступны для более на GitHub .