Supplier: Generazione dei Dati
Ecco come viene implementata l'interfaccia funzionale Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
La responsabilità principale del metodo get() è restituire un oggetto di tipo T senza richiedere alcun parametro.
Uso pratico di Supplier
Supplier viene spesso utilizzato in situazioni in cui i dati devono essere generati su richiesta. Questo può essere utile per l'inizializzazione pigra, la generazione di valori casuali o il recupero di valori da una fonte esterna.
Creiamo un sistema che genera password casuali. Utilizzando l'interfaccia funzionale Supplier, è possibile organizzare facilmente la generazione di password su richiesta.
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); } }
Si crea un Supplier che genera una password casuale di 12 caratteri. L'espressione lambda all'interno del Supplier utilizza la classe Random per selezionare caratteri casuali da una stringa.
Il metodo get() attiva questa logica di generazione della password solo quando necessario, consentendo la generazione pigra dei valori.
Generazione pigra
Inizialmente, si crea il Supplier, ma il codice al suo interno non viene eseguito immediatamente. Questa è una caratteristica importante. Invece di eseguire subito una logica (ad esempio, la generazione di una password), la si registra semplicemente all'interno del Supplier come istruzione da eseguire successivamente quando richiesto.
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();
};
In questo caso, il codice all'interno del Supplier (generazione della password) non viene eseguito immediatamente. Invece, si sta indicando: "Quando richiesto, questa sarà la modalità di generazione della password." Ora, quando si invoca get() su questo Supplier:
String generatedPassword = passwordSupplier.get();
Solo allora il codice all'interno del Supplier viene eseguito e la password viene generata. Questa è esecuzione pigra.
Responsabilità principali
1. Cosa fa l'interfaccia Supplier in Java?
2. Cosa succede se si chiama il metodo get() due volte sullo stesso oggetto Supplier?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 2.33
Supplier: Generazione dei Dati
Scorri per mostrare il menu
Ecco come viene implementata l'interfaccia funzionale Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
La responsabilità principale del metodo get() è restituire un oggetto di tipo T senza richiedere alcun parametro.
Uso pratico di Supplier
Supplier viene spesso utilizzato in situazioni in cui i dati devono essere generati su richiesta. Questo può essere utile per l'inizializzazione pigra, la generazione di valori casuali o il recupero di valori da una fonte esterna.
Creiamo un sistema che genera password casuali. Utilizzando l'interfaccia funzionale Supplier, è possibile organizzare facilmente la generazione di password su richiesta.
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); } }
Si crea un Supplier che genera una password casuale di 12 caratteri. L'espressione lambda all'interno del Supplier utilizza la classe Random per selezionare caratteri casuali da una stringa.
Il metodo get() attiva questa logica di generazione della password solo quando necessario, consentendo la generazione pigra dei valori.
Generazione pigra
Inizialmente, si crea il Supplier, ma il codice al suo interno non viene eseguito immediatamente. Questa è una caratteristica importante. Invece di eseguire subito una logica (ad esempio, la generazione di una password), la si registra semplicemente all'interno del Supplier come istruzione da eseguire successivamente quando richiesto.
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();
};
In questo caso, il codice all'interno del Supplier (generazione della password) non viene eseguito immediatamente. Invece, si sta indicando: "Quando richiesto, questa sarà la modalità di generazione della password." Ora, quando si invoca get() su questo Supplier:
String generatedPassword = passwordSupplier.get();
Solo allora il codice all'interno del Supplier viene eseguito e la password viene generata. Questa è esecuzione pigra.
Responsabilità principali
1. Cosa fa l'interfaccia Supplier in Java?
2. Cosa succede se si chiama il metodo get() due volte sullo stesso oggetto Supplier?
Grazie per i tuoi commenti!