Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Filtrado de Elementos con el Método filter() | Operaciones Intermedias en Stream API
Stream API

bookFiltrado de Elementos con el Método filter()

Al trabajar con colecciones de datos en Java, a menudo es necesario extraer elementos específicos que cumplen ciertas condiciones. Tradicionalmente, esto requiere bucles y sentencias condicionales, lo que hace que el código sea más extenso. Ahí es donde el método filter() resulta útil.

Ya has utilizado este método en nuestros ejemplos, pero no hemos analizado en detalle qué recibe como argumento. Acepta una interfaz funcional Predicate<T>, que define si un elemento debe incluirse en el stream resultante.

Stream<T> filter(Predicate<? super T> predicate);

Aquí, T es el tipo de elementos en el stream, y Predicate<? super T> es la condición de filtrado, utilizada para verificar cada elemento.

Aplicación práctica

Suponga que tiene una lista de empleados, cada uno con un name y yearsOfExperience en la empresa. Se desea seleccionar solo aquellos que han estado en la empresa por más de 5 años para ofrecerles un bono o beneficios adicionales.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Employee { private final String name; private final int yearsOfExperience; public Employee(String name, int yearsOfExperience) { this.name = name; this.yearsOfExperience = yearsOfExperience; } public String getName() { return name; } public int getYearsOfExperience() { return yearsOfExperience; } @Override public String toString() { return name + " (" + yearsOfExperience + " years)"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("John", 6), new Employee("Sarah", 4), new Employee("Mike", 7), new Employee("Anna", 3), new Employee("Tom", 8) ); // Filtering employees with more than 5 years of experience List<Employee> experiencedEmployees = employees.stream() .filter(e -> e.getYearsOfExperience() > 5) .toList(); System.out.println("Experienced employees: " + experiencedEmployees); } }

En este ejemplo, se crea un stream de empleados utilizando stream(). Luego, mediante el método filter, se filtran los empleados que tienen más de 5 años de experiencia.

El resultado es una nueva lista que contiene únicamente aquellos empleados que cumplen con esta condición.

Cuándo usar filter

En la mayoría de los casos, es preferible utilizar filter() al inicio para reducir la cantidad de datos para las operaciones posteriores. Esto mejora el rendimiento ya que las operaciones siguientes se realizarán sobre un conjunto de datos más pequeño.

Ejemplo

Si se tiene una lista de empleados y se desea primero filtrar aquellos con más de 5 años de experiencia y luego transformar los empleados restantes a un formato diferente, tiene sentido comenzar con el filtrado.

List<Employee> result = employees.stream()
        .filter(e -> e.getYearsOfExperience() > 5)  // First, `filter`
        .map(e -> e.getName())  // Then apply other operations
        .toList();

Como puedes observar, en este ejemplo, se coloca el método filter() antes de map() porque permite reducir primero la cantidad de elementos con los que se debe trabajar. Se filtran los empleados con más de 5 años de experiencia y luego se extraen sus nombres.

Este orden de operaciones es eficiente porque evita el procesamiento innecesario de datos durante la fase de transformación.

1. ¿Qué hace el método filter() en Stream API?

2. ¿Qué tipo de argumento acepta el método filter()?

3. ¿Qué sucede si se utiliza una condición en el método filter() que siempre devuelve false?

question mark

¿Qué hace el método filter() en Stream API?

Select the correct answer

question mark

¿Qué tipo de argumento acepta el método filter()?

Select the correct answer

question mark

¿Qué sucede si se utiliza una condición en el método filter() que siempre devuelve false?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain what a Predicate is in Java?

Can you show a full example with the Employee class?

Why is the order of filter and map important?

Awesome!

Completion rate improved to 2.33

bookFiltrado de Elementos con el Método filter()

Desliza para mostrar el menú

Al trabajar con colecciones de datos en Java, a menudo es necesario extraer elementos específicos que cumplen ciertas condiciones. Tradicionalmente, esto requiere bucles y sentencias condicionales, lo que hace que el código sea más extenso. Ahí es donde el método filter() resulta útil.

Ya has utilizado este método en nuestros ejemplos, pero no hemos analizado en detalle qué recibe como argumento. Acepta una interfaz funcional Predicate<T>, que define si un elemento debe incluirse en el stream resultante.

Stream<T> filter(Predicate<? super T> predicate);

Aquí, T es el tipo de elementos en el stream, y Predicate<? super T> es la condición de filtrado, utilizada para verificar cada elemento.

Aplicación práctica

Suponga que tiene una lista de empleados, cada uno con un name y yearsOfExperience en la empresa. Se desea seleccionar solo aquellos que han estado en la empresa por más de 5 años para ofrecerles un bono o beneficios adicionales.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Employee { private final String name; private final int yearsOfExperience; public Employee(String name, int yearsOfExperience) { this.name = name; this.yearsOfExperience = yearsOfExperience; } public String getName() { return name; } public int getYearsOfExperience() { return yearsOfExperience; } @Override public String toString() { return name + " (" + yearsOfExperience + " years)"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("John", 6), new Employee("Sarah", 4), new Employee("Mike", 7), new Employee("Anna", 3), new Employee("Tom", 8) ); // Filtering employees with more than 5 years of experience List<Employee> experiencedEmployees = employees.stream() .filter(e -> e.getYearsOfExperience() > 5) .toList(); System.out.println("Experienced employees: " + experiencedEmployees); } }

En este ejemplo, se crea un stream de empleados utilizando stream(). Luego, mediante el método filter, se filtran los empleados que tienen más de 5 años de experiencia.

El resultado es una nueva lista que contiene únicamente aquellos empleados que cumplen con esta condición.

Cuándo usar filter

En la mayoría de los casos, es preferible utilizar filter() al inicio para reducir la cantidad de datos para las operaciones posteriores. Esto mejora el rendimiento ya que las operaciones siguientes se realizarán sobre un conjunto de datos más pequeño.

Ejemplo

Si se tiene una lista de empleados y se desea primero filtrar aquellos con más de 5 años de experiencia y luego transformar los empleados restantes a un formato diferente, tiene sentido comenzar con el filtrado.

List<Employee> result = employees.stream()
        .filter(e -> e.getYearsOfExperience() > 5)  // First, `filter`
        .map(e -> e.getName())  // Then apply other operations
        .toList();

Como puedes observar, en este ejemplo, se coloca el método filter() antes de map() porque permite reducir primero la cantidad de elementos con los que se debe trabajar. Se filtran los empleados con más de 5 años de experiencia y luego se extraen sus nombres.

Este orden de operaciones es eficiente porque evita el procesamiento innecesario de datos durante la fase de transformación.

1. ¿Qué hace el método filter() en Stream API?

2. ¿Qué tipo de argumento acepta el método filter()?

3. ¿Qué sucede si se utiliza una condición en el método filter() que siempre devuelve false?

question mark

¿Qué hace el método filter() en Stream API?

Select the correct answer

question mark

¿Qué tipo de argumento acepta el método filter()?

Select the correct answer

question mark

¿Qué sucede si se utiliza una condición en el método filter() que siempre devuelve false?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 2
some-alt