Buscando una cadena en una ArrayList

1. Información general

En este tutorial, veremos diferentes formas de buscar una cadena en una ArrayList . Nuestra intención es verificar si una secuencia específica de caracteres no vacía está presente en alguno de los elementos de ArrayList y devolver una lista con todos los elementos coincidentes.

2. Bucle básico

Primero, usemos un bucle básico para buscar la secuencia de caracteres en la cadena de búsqueda dada usando el método contains de la clase String de 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. Streams

La API de Java 8 Streams nos proporciona una solución más compacta mediante el uso de operaciones funcionales.

Primero, usaremos el método filter () para buscar en nuestra lista de entrada la cadena de búsqueda, y luego usaremos el método de recopilación para crear y completar una lista que contenga los elementos coincidentes:

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

4. Bibliotecas de terceros

Si no podemos usar la API de Java 8 Stream, podemos buscar bibliotecas de terceros como Commons Collections y Google Guava.

Para usarlos, solo necesitamos agregar Guava, Commons Collections o ambas dependencias en nuestro archivo pom.xml:

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

4.1. Colecciones comunes

Commons Collections nos proporciona un método IterableUtils.filteredIterable () que compara el Iterable dado con un Predicado .

Llamemos a IterableUtils.filteredIterable () , definiendo el predicado para seleccionar solo aquellos elementos que contienen la cadena de búsqueda. Luego, usaremos IteratorUtils.toList () para convertir el Iterable en una Lista :

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 Guayaba

Google Guava ofrece una solución similar a la de Apache filteredIterable () con el Iterables.filter () método. Usémoslo para filtrar la lista y devolver solo los elementos que coinciden con nuestra cadena de búsqueda:

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

5. Conclusión

En este tutorial, hemos aprendido diferentes formas de buscar una cadena en una ArrayList. Primero comenzamos con un bucle for simple y luego procedimos con un enfoque utilizando la API Stream. Finalmente, vimos algunos ejemplos usando dos bibliotecas de terceros: Google Guava y Commons Collections .

Los ejemplos completos están disponibles en GitHub.