Filtrado de Colecciones con Streams
El filtrado es una de las operaciones más comunes realizadas en colecciones utilizando la API de Stream de Java. El filtrado te permite seleccionar un subconjunto de elementos de una colección basado en un predicado dado.
Aplicando Filtros
El método filter() se utiliza para aplicar un filtro a un stream. Este método toma una expresión lambda o una referencia a método como argumento, que representa la condición de filtrado.
List<String> names = Arrays.asList("John", "Jane", "Bob", "Alice");
Stream<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"));
filteredNames.forEach(System.out::println);
En el ejemplo anterior, creamos un stream a partir de una lista de nombres y luego usamos el método filter() para seleccionar solo los nombres que empiecen con la letra "J".
Encadenando Múltiples Filtros
Puedes encadenar múltiples llamadas a filter() para aplicar múltiples condiciones de filtrado a un stream.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> filteredNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.filter(n -> n > 5);
filteredNumbers.forEach(System.out::println);
En este ejemplo, primero filtramos los números para seleccionar solo los números pares, y luego aplicamos un segundo filtro para seleccionar solo los números pares mayores que 5.
Combinando Filtros con Otras Operaciones
El filtrado se puede combinar con otras operaciones de stream, como mapeo, ordenación y reducción, para crear transformaciones de datos más complejas.
List<Person> persons = Arrays.asList(
new Person("John", 30),
new Person("Jane", 25),
new Person("Bob", 35),
new Person("Alice", 28)
);
List<String> youngAdultNames = persons.stream()
.filter(p -> p.getAge() >= 18 && p.getAge() < 30)
.map(Person::getName)
.collect(Collectors.toList());
System.out.println(youngAdultNames);
En este ejemplo, primero filtramos la lista de objetos Person para seleccionar solo los jóvenes adultos (entre 18 y 30 años), luego mapeamos la propiedad Name de cada objeto Person y, finalmente, recopilamos los resultados en una nueva lista.
Al entender el poder del filtrado con la API de Stream de Java, puedes manipular y procesar eficazmente tus colecciones de datos. En la siguiente sección, exploraremos más ejemplos prácticos de aplicación de filtros.