Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Consumer : Traitement des Données | Fondamentaux et Capacités Fonctionnelles de l'API Stream
API Stream

bookConsumer : Traitement des Données

Vous avez déjà exploré de nombreuses interfaces fonctionnelles en Java, mais que faire si vous devez effectuer une opération qui prend un argument, applique certaines modifications ou produit un effet de bord—sans retourner de résultat ? C'est ici qu'intervient l'interface fonctionnelle Consumer.

Interface Consumer

Elle est couramment utilisée pour effectuer des actions qui modifient l'état ou produisent des effets de bord sans retourner de valeur.

L'interface Consumer fait partie du java.util.function package et est définie comme suit :

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

La méthode accept(T t) prend un objet de type T en entrée et effectue une opération dessus sans retourner de résultat.

Application pratique

Supposons que vous disposiez d'une liste de chaînes de caractères, et que pour chaque chaîne, il soit nécessaire de l'afficher accompagnée d'un identifiant unique, séparés par un espace. Cela peut être réalisé à l'aide de l'interface Consumer en transmettant chaque chaîne avec son indice (id).

Main.java

Main.java

copy
12345678910111213141516171819
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Creating a `Consumer` that prints each string with its id Consumer<String> printNameWithId = (name) -> { int id = names.indexOf(name) + 1; // id = index + 1 System.out.println(id + " " + name); }; // Using `Consumer` to print each string with its id names.forEach(printNameWithId); } }

Dans cet exemple, Consumer est utilisé pour afficher chaque chaîne de la liste avec un identifiant unique. L'id de chaque élément est calculé à l'aide de son indice dans la liste, et le résultat est affiché au format "id string". Cela permet de traiter les éléments de la liste sans utiliser explicitement de boucle.

Le code peut également être simplifié en écrivant directement l'expression lambda à l'intérieur de la boucle forEach :

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Using `forEach` with a lambda expression to print the ID and name names.forEach(name -> System.out.println((names.indexOf(name) + 1) + " " + name)); } }

Comme vous pouvez le constater, le résultat reste identique, tandis que le code devient plus concise et facile à lire.

Utilisation de la méthode par défaut

L’interface Consumer inclut également une méthode par défaut permettant de combiner plusieurs opérations.

La méthode andThen() permet de chaîner deux opérations Consumer. Le premier Consumer s’exécute en premier, suivi du second.

Par exemple, imaginez que vous disposez d’une liste de noms et que vous souhaitez effectuer deux tâches : afficher chaque nom en majuscules puis afficher la longueur de ce nom. En utilisant andThen(), il est possible de combiner les deux opérations dans un seul Consumer qui les applique séquentiellement.

Main.java

Main.java

copy
12345678910111213141516171819202122
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // First `Consumer` — prints the name in uppercase Consumer<String> printUpperCase = name -> System.out.print(name.toUpperCase() + " - "); // Second `Consumer` — prints the length of the name Consumer<String> printLength = name -> System.out.println(name.length()); // Combine both `Consumers` using `andThen()` Consumer<String> combinedConsumer = printUpperCase.andThen(printLength); // Apply the combined `Consumer` to each name names.forEach(combinedConsumer); } }

Dans cet exemple, vous affichez d'abord le nom en majuscules, suivi d'un tiret et de la longueur du nom. Vous utilisez andThen() pour combiner deux opérations Consumer afin que la première affiche le nom et la seconde affiche sa longueur.

1. Que fait la méthode andThen() dans l'interface Consumer ?

2. Quel type de données la méthode accept dans l'interface Consumer prend-elle en paramètre ?

question mark

Que fait la méthode andThen() dans l'interface Consumer ?

Select the correct answer

question mark

Quel type de données la méthode accept dans l'interface Consumer prend-elle en paramètre ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 11

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

Suggested prompts:

Can you show an example of using the Consumer interface with a list?

How does the andThen() method work in practice?

What are some common use cases for the Consumer interface?

bookConsumer : Traitement des Données

Glissez pour afficher le menu

Vous avez déjà exploré de nombreuses interfaces fonctionnelles en Java, mais que faire si vous devez effectuer une opération qui prend un argument, applique certaines modifications ou produit un effet de bord—sans retourner de résultat ? C'est ici qu'intervient l'interface fonctionnelle Consumer.

Interface Consumer

Elle est couramment utilisée pour effectuer des actions qui modifient l'état ou produisent des effets de bord sans retourner de valeur.

L'interface Consumer fait partie du java.util.function package et est définie comme suit :

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

La méthode accept(T t) prend un objet de type T en entrée et effectue une opération dessus sans retourner de résultat.

Application pratique

Supposons que vous disposiez d'une liste de chaînes de caractères, et que pour chaque chaîne, il soit nécessaire de l'afficher accompagnée d'un identifiant unique, séparés par un espace. Cela peut être réalisé à l'aide de l'interface Consumer en transmettant chaque chaîne avec son indice (id).

Main.java

Main.java

copy
12345678910111213141516171819
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Creating a `Consumer` that prints each string with its id Consumer<String> printNameWithId = (name) -> { int id = names.indexOf(name) + 1; // id = index + 1 System.out.println(id + " " + name); }; // Using `Consumer` to print each string with its id names.forEach(printNameWithId); } }

Dans cet exemple, Consumer est utilisé pour afficher chaque chaîne de la liste avec un identifiant unique. L'id de chaque élément est calculé à l'aide de son indice dans la liste, et le résultat est affiché au format "id string". Cela permet de traiter les éléments de la liste sans utiliser explicitement de boucle.

Le code peut également être simplifié en écrivant directement l'expression lambda à l'intérieur de la boucle forEach :

Main.java

Main.java

copy
123456789101112
package com.example; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // Using `forEach` with a lambda expression to print the ID and name names.forEach(name -> System.out.println((names.indexOf(name) + 1) + " " + name)); } }

Comme vous pouvez le constater, le résultat reste identique, tandis que le code devient plus concise et facile à lire.

Utilisation de la méthode par défaut

L’interface Consumer inclut également une méthode par défaut permettant de combiner plusieurs opérations.

La méthode andThen() permet de chaîner deux opérations Consumer. Le premier Consumer s’exécute en premier, suivi du second.

Par exemple, imaginez que vous disposez d’une liste de noms et que vous souhaitez effectuer deux tâches : afficher chaque nom en majuscules puis afficher la longueur de ce nom. En utilisant andThen(), il est possible de combiner les deux opérations dans un seul Consumer qui les applique séquentiellement.

Main.java

Main.java

copy
12345678910111213141516171819202122
package com.example; import java.util.List; import java.util.function.Consumer; public class Main { public static void main(String[] args) { List<String> names = List.of("Alice", "Bob", "Charlie"); // First `Consumer` — prints the name in uppercase Consumer<String> printUpperCase = name -> System.out.print(name.toUpperCase() + " - "); // Second `Consumer` — prints the length of the name Consumer<String> printLength = name -> System.out.println(name.length()); // Combine both `Consumers` using `andThen()` Consumer<String> combinedConsumer = printUpperCase.andThen(printLength); // Apply the combined `Consumer` to each name names.forEach(combinedConsumer); } }

Dans cet exemple, vous affichez d'abord le nom en majuscules, suivi d'un tiret et de la longueur du nom. Vous utilisez andThen() pour combiner deux opérations Consumer afin que la première affiche le nom et la seconde affiche sa longueur.

1. Que fait la méthode andThen() dans l'interface Consumer ?

2. Quel type de données la méthode accept dans l'interface Consumer prend-elle en paramètre ?

question mark

Que fait la méthode andThen() dans l'interface Consumer ?

Select the correct answer

question mark

Quel type de données la méthode accept dans l'interface Consumer prend-elle en paramètre ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 11
some-alt