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

bookSupplier : Génération de Données

Voici comment l’interface fonctionnelle Supplier est implémentée :

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

La responsabilité principale de la méthode get() est de retourner un objet de type T sans prendre de paramètres.

Utilisation pratique de Supplier

Supplier est fréquemment utilisé dans des situations où les données doivent être générées à la demande. Cela peut s'avérer utile pour l'initialisation paresseuse, la génération de valeurs aléatoires ou la récupération de valeurs depuis une source externe.

Création d'un système générant des mots de passe aléatoires. Grâce à l'interface fonctionnelle Supplier, il est possible d'organiser facilement la génération de mots de passe sur demande.

Main.java

Main.java

copy
123456789101112131415161718192021222324
package com.example; import java.util.Random; import java.util.function.Supplier; public class Main { public static void main(String[] args) { // Supplier for generating random passwords Supplier<String> passwordSupplier = () -> { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"; StringBuilder password = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 12; i++) { int index = random.nextInt(characters.length()); password.append(characters.charAt(index)); } return password.toString(); }; // Generate and print the random password String generatedPassword = passwordSupplier.get(); System.out.println("Generated password: " + generatedPassword); } }

Vous créez un Supplier qui génère un mot de passe aléatoire de 12 caractères. L'expression lambda à l'intérieur du Supplier utilise la classe Random pour sélectionner des caractères aléatoires à partir d'une chaîne de caractères.

La méthode get() déclenche cette logique de génération de mot de passe uniquement lorsque cela est nécessaire, permettant ainsi une génération paresseuse des valeurs.

Génération paresseuse

Initialement, vous créez le Supplier, mais le code à l'intérieur n'est pas exécuté immédiatement. Il s'agit d'une caractéristique importante. Au lieu d'exécuter une logique immédiatement (par exemple, générer un mot de passe), vous l'enregistrez simplement dans le Supplier comme une instruction à exécuter ultérieurement lorsque cela sera nécessaire.

Supplier<String> passwordSupplier = () -> {
    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
    StringBuilder password = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 12; i++) {
        int index = random.nextInt(characters.length());
        password.append(characters.charAt(index));
    }
    return password.toString();
};

Ici, le code à l'intérieur du Supplier (génération de mot de passe) ne s'exécute pas immédiatement. À la place, vous indiquez : « Lorsqu'une demande est faite, voici comment le mot de passe sera généré. » Maintenant, lorsque vous appelez get() sur ce Supplier :

String generatedPassword = passwordSupplier.get();

Ce n'est qu'à ce moment-là que le code à l'intérieur du Supplier s'exécute, et que le mot de passe est généré. Il s'agit d'une exécution paresseuse.

Responsabilités principales

1. Que fait l'interface Supplier en Java ?

2. Que se passe-t-il si vous appelez la méthode get() deux fois sur le même objet Supplier ?

question mark

Que fait l'interface Supplier en Java ?

Select the correct answer

question mark

Que se passe-t-il si vous appelez la méthode get() deux fois sur le même objet Supplier ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 12

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 give more examples of how Supplier is used in real-world applications?

What is the difference between Supplier and other functional interfaces like Function or Predicate?

Can you explain more about lazy initialization and why it's useful?

Awesome!

Completion rate improved to 2.33

bookSupplier : Génération de Données

Glissez pour afficher le menu

Voici comment l’interface fonctionnelle Supplier est implémentée :

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

La responsabilité principale de la méthode get() est de retourner un objet de type T sans prendre de paramètres.

Utilisation pratique de Supplier

Supplier est fréquemment utilisé dans des situations où les données doivent être générées à la demande. Cela peut s'avérer utile pour l'initialisation paresseuse, la génération de valeurs aléatoires ou la récupération de valeurs depuis une source externe.

Création d'un système générant des mots de passe aléatoires. Grâce à l'interface fonctionnelle Supplier, il est possible d'organiser facilement la génération de mots de passe sur demande.

Main.java

Main.java

copy
123456789101112131415161718192021222324
package com.example; import java.util.Random; import java.util.function.Supplier; public class Main { public static void main(String[] args) { // Supplier for generating random passwords Supplier<String> passwordSupplier = () -> { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"; StringBuilder password = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 12; i++) { int index = random.nextInt(characters.length()); password.append(characters.charAt(index)); } return password.toString(); }; // Generate and print the random password String generatedPassword = passwordSupplier.get(); System.out.println("Generated password: " + generatedPassword); } }

Vous créez un Supplier qui génère un mot de passe aléatoire de 12 caractères. L'expression lambda à l'intérieur du Supplier utilise la classe Random pour sélectionner des caractères aléatoires à partir d'une chaîne de caractères.

La méthode get() déclenche cette logique de génération de mot de passe uniquement lorsque cela est nécessaire, permettant ainsi une génération paresseuse des valeurs.

Génération paresseuse

Initialement, vous créez le Supplier, mais le code à l'intérieur n'est pas exécuté immédiatement. Il s'agit d'une caractéristique importante. Au lieu d'exécuter une logique immédiatement (par exemple, générer un mot de passe), vous l'enregistrez simplement dans le Supplier comme une instruction à exécuter ultérieurement lorsque cela sera nécessaire.

Supplier<String> passwordSupplier = () -> {
    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
    StringBuilder password = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 12; i++) {
        int index = random.nextInt(characters.length());
        password.append(characters.charAt(index));
    }
    return password.toString();
};

Ici, le code à l'intérieur du Supplier (génération de mot de passe) ne s'exécute pas immédiatement. À la place, vous indiquez : « Lorsqu'une demande est faite, voici comment le mot de passe sera généré. » Maintenant, lorsque vous appelez get() sur ce Supplier :

String generatedPassword = passwordSupplier.get();

Ce n'est qu'à ce moment-là que le code à l'intérieur du Supplier s'exécute, et que le mot de passe est généré. Il s'agit d'une exécution paresseuse.

Responsabilités principales

1. Que fait l'interface Supplier en Java ?

2. Que se passe-t-il si vous appelez la méthode get() deux fois sur le même objet Supplier ?

question mark

Que fait l'interface Supplier en Java ?

Select the correct answer

question mark

Que se passe-t-il si vous appelez la méthode get() deux fois sur le même objet Supplier ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 12
some-alt