Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Filtrando Elementos com o Método filter() | Operações Intermediárias na Stream API
Stream API

bookFiltrando Elementos com o Método filter()

Ao trabalhar com coleções de dados em Java, frequentemente é necessário extrair elementos específicos que atendam a determinadas condições. Tradicionalmente, isso exige o uso de laços e instruções condicionais, tornando o código mais extenso. É nesse contexto que o método filter() se destaca.

Este método já foi utilizado em nossos exemplos, mas ainda não discutimos em detalhes o que ele recebe como argumento. Ele aceita uma interface funcional Predicate<T>, que define se um elemento deve ser incluído no stream resultante.

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

Aqui, T é o tipo dos elementos no stream, e Predicate<? super T> é a condição de filtragem, usada para verificar cada elemento.

Aplicação Prática

Considere uma lista de funcionários, cada um com um name e yearsOfExperience na empresa. O objetivo é selecionar apenas aqueles que estão na empresa há mais de 5 anos para oferecer um bônus ou benefícios adicionais.

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); } }

Neste exemplo, é criado um stream de funcionários utilizando stream(). Em seguida, com o método filter, são filtrados os funcionários que possuem mais de 5 anos de experiência.

O resultado é uma nova lista contendo apenas os funcionários que atendem a essa condição.

Quando usar filter

Na maioria dos casos, é melhor utilizar filter() no início para reduzir a quantidade de dados para as operações subsequentes. Isso melhora o desempenho, pois as operações posteriores serão realizadas em um conjunto de dados menor.

Exemplo

Se houver uma lista de funcionários e for necessário primeiro filtrar aqueles com mais de 5 anos de experiência e depois transformar os funcionários restantes em um formato diferente, faz sentido começar pela filtragem.

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

Como pode ser visto neste exemplo, o filter() é colocado antes do método map() porque permite reduzir o número de elementos com os quais você precisa trabalhar inicialmente. Você filtra os funcionários com mais de 5 anos de experiência e, em seguida, extrai seus nomes.

Essa ordem de operações é eficiente porque evita o processamento desnecessário de dados durante a fase de transformação.

1. O que o método filter() faz na Stream API?

2. Que tipo de argumento o método filter() aceita?

3. O que acontece se você usar uma condição no método filter() que sempre retorna false?

question mark

O que o método filter() faz na Stream API?

Select the correct answer

question mark

Que tipo de argumento o método filter() aceita?

Select the correct answer

question mark

O que acontece se você usar uma condição no método filter() que sempre retorna false?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.33

bookFiltrando Elementos com o Método filter()

Deslize para mostrar o menu

Ao trabalhar com coleções de dados em Java, frequentemente é necessário extrair elementos específicos que atendam a determinadas condições. Tradicionalmente, isso exige o uso de laços e instruções condicionais, tornando o código mais extenso. É nesse contexto que o método filter() se destaca.

Este método já foi utilizado em nossos exemplos, mas ainda não discutimos em detalhes o que ele recebe como argumento. Ele aceita uma interface funcional Predicate<T>, que define se um elemento deve ser incluído no stream resultante.

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

Aqui, T é o tipo dos elementos no stream, e Predicate<? super T> é a condição de filtragem, usada para verificar cada elemento.

Aplicação Prática

Considere uma lista de funcionários, cada um com um name e yearsOfExperience na empresa. O objetivo é selecionar apenas aqueles que estão na empresa há mais de 5 anos para oferecer um bônus ou benefícios adicionais.

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); } }

Neste exemplo, é criado um stream de funcionários utilizando stream(). Em seguida, com o método filter, são filtrados os funcionários que possuem mais de 5 anos de experiência.

O resultado é uma nova lista contendo apenas os funcionários que atendem a essa condição.

Quando usar filter

Na maioria dos casos, é melhor utilizar filter() no início para reduzir a quantidade de dados para as operações subsequentes. Isso melhora o desempenho, pois as operações posteriores serão realizadas em um conjunto de dados menor.

Exemplo

Se houver uma lista de funcionários e for necessário primeiro filtrar aqueles com mais de 5 anos de experiência e depois transformar os funcionários restantes em um formato diferente, faz sentido começar pela filtragem.

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

Como pode ser visto neste exemplo, o filter() é colocado antes do método map() porque permite reduzir o número de elementos com os quais você precisa trabalhar inicialmente. Você filtra os funcionários com mais de 5 anos de experiência e, em seguida, extrai seus nomes.

Essa ordem de operações é eficiente porque evita o processamento desnecessário de dados durante a fase de transformação.

1. O que o método filter() faz na Stream API?

2. Que tipo de argumento o método filter() aceita?

3. O que acontece se você usar uma condição no método filter() que sempre retorna false?

question mark

O que o método filter() faz na Stream API?

Select the correct answer

question mark

Que tipo de argumento o método filter() aceita?

Select the correct answer

question mark

O que acontece se você usar uma condição no método filter() que sempre retorna false?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2
some-alt