Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Filtrage des Éléments avec la Méthode filter() | Opérations Intermédiaires dans l'API Stream
API Stream

bookFiltrage des Éléments avec la Méthode filter()

Lors de la manipulation de collections de données en Java, il est souvent nécessaire d’extraire des éléments spécifiques répondant à certaines conditions. Traditionnellement, cela nécessite des boucles et des instructions conditionnelles, rendant le code plus verbeux. C’est là que la méthode filter() intervient.

Vous avez déjà utilisé cette méthode dans nos exemples, mais nous n’avons pas encore détaillé ce qu’elle prend comme argument. Elle accepte une interface fonctionnelle Predicate<T>, qui définit si un élément doit être inclus dans le stream résultant.

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

Ici, T représente le type des éléments dans le flux, et Predicate<? super T> est la condition de filtrage, utilisée pour vérifier chaque élément.

Application pratique

Supposons que vous disposiez d'une liste d'employés, chacun ayant un name et un yearsOfExperience dans l'entreprise. Vous souhaitez sélectionner uniquement ceux qui travaillent dans l'entreprise depuis plus de 5 ans afin de leur proposer une prime ou des avantages supplémentaires.

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

Dans cet exemple, vous créez un flux d'employés à l'aide de stream(). Ensuite, en utilisant la méthode filter, vous filtrez les employés ayant plus de 5 ans d'expérience.

Le résultat est une nouvelle liste contenant uniquement les employés qui remplissent cette condition.

Quand utiliser filter

Dans la plupart des cas, il est préférable d'utiliser filter() au début afin de réduire la quantité de données pour les opérations suivantes. Cela améliore les performances puisque les opérations ultérieures seront effectuées sur un ensemble de données plus restreint.

Exemple

Si vous disposez d'une liste d'employés et que vous souhaitez d'abord filtrer ceux ayant plus de 5 ans d'expérience puis transformer les employés restants dans un format différent, il est judicieux de commencer par le filtrage.

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

Comme vous pouvez le constater, dans cet exemple, vous placez la méthode filter() avant la méthode map() car cela permet de réduire le nombre d'éléments à traiter en premier lieu. Vous filtrez les employés ayant plus de 5 ans d'expérience, puis vous extraites leurs noms.

Cet ordre d'opérations est efficace car il évite un traitement de données inutile lors de la phase de transformation.

1. Que fait la méthode filter() dans le Stream API ?

2. Quel type d’argument la méthode filter() accepte-t-elle ?

3. Que se passe-t-il si vous utilisez une condition dans la méthode filter() qui retourne toujours false ?

question mark

Que fait la méthode filter() dans le Stream API ?

Select the correct answer

question mark

Quel type d’argument la méthode filter() accepte-t-elle ?

Select the correct answer

question mark

Que se passe-t-il si vous utilisez une condition dans la méthode filter() qui retourne toujours false ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 2

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 2.33

bookFiltrage des Éléments avec la Méthode filter()

Glissez pour afficher le menu

Lors de la manipulation de collections de données en Java, il est souvent nécessaire d’extraire des éléments spécifiques répondant à certaines conditions. Traditionnellement, cela nécessite des boucles et des instructions conditionnelles, rendant le code plus verbeux. C’est là que la méthode filter() intervient.

Vous avez déjà utilisé cette méthode dans nos exemples, mais nous n’avons pas encore détaillé ce qu’elle prend comme argument. Elle accepte une interface fonctionnelle Predicate<T>, qui définit si un élément doit être inclus dans le stream résultant.

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

Ici, T représente le type des éléments dans le flux, et Predicate<? super T> est la condition de filtrage, utilisée pour vérifier chaque élément.

Application pratique

Supposons que vous disposiez d'une liste d'employés, chacun ayant un name et un yearsOfExperience dans l'entreprise. Vous souhaitez sélectionner uniquement ceux qui travaillent dans l'entreprise depuis plus de 5 ans afin de leur proposer une prime ou des avantages supplémentaires.

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

Dans cet exemple, vous créez un flux d'employés à l'aide de stream(). Ensuite, en utilisant la méthode filter, vous filtrez les employés ayant plus de 5 ans d'expérience.

Le résultat est une nouvelle liste contenant uniquement les employés qui remplissent cette condition.

Quand utiliser filter

Dans la plupart des cas, il est préférable d'utiliser filter() au début afin de réduire la quantité de données pour les opérations suivantes. Cela améliore les performances puisque les opérations ultérieures seront effectuées sur un ensemble de données plus restreint.

Exemple

Si vous disposez d'une liste d'employés et que vous souhaitez d'abord filtrer ceux ayant plus de 5 ans d'expérience puis transformer les employés restants dans un format différent, il est judicieux de commencer par le filtrage.

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

Comme vous pouvez le constater, dans cet exemple, vous placez la méthode filter() avant la méthode map() car cela permet de réduire le nombre d'éléments à traiter en premier lieu. Vous filtrez les employés ayant plus de 5 ans d'expérience, puis vous extraites leurs noms.

Cet ordre d'opérations est efficace car il évite un traitement de données inutile lors de la phase de transformation.

1. Que fait la méthode filter() dans le Stream API ?

2. Quel type d’argument la méthode filter() accepte-t-elle ?

3. Que se passe-t-il si vous utilisez une condition dans la méthode filter() qui retourne toujours false ?

question mark

Que fait la méthode filter() dans le Stream API ?

Select the correct answer

question mark

Quel type d’argument la méthode filter() accepte-t-elle ?

Select the correct answer

question mark

Que se passe-t-il si vous utilisez une condition dans la méthode filter() qui retourne toujours false ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 2
some-alt