Supplier : 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
123456789101112131415161718192021222324package 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 ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
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
Supplier : 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
123456789101112131415161718192021222324package 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 ?
Merci pour vos commentaires !