Supplier: Generación de Datos
A continuación se muestra cómo se implementa la interfaz funcional Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
La responsabilidad principal del método get() es devolver un objeto de tipo T sin recibir ningún parámetro.
Uso práctico de Supplier
Supplier se utiliza frecuentemente en situaciones donde los datos deben generarse bajo demanda. Esto resulta útil para inicialización diferida, generación de valores aleatorios o obtención de valores desde una fuente externa.
A continuación, se presenta un sistema que genera contraseñas aleatorias. Utilizando la interfaz funcional Supplier, es posible organizar fácilmente la generación de contraseñas a solicitud.
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); } }
Se crea un Supplier que genera una contraseña aleatoria de 12 caracteres. La expresión lambda dentro del Supplier utiliza la clase Random para seleccionar caracteres aleatorios de una cadena.
El método get() activa esta lógica de generación de contraseñas solo cuando es necesario, permitiendo la generación perezosa de valores.
Generación perezosa
Inicialmente, se crea el Supplier, pero el código dentro de él no se ejecuta de inmediato. Esta es una característica importante. En lugar de ejecutar alguna lógica de inmediato (por ejemplo, generar una contraseña), simplemente se registra dentro del Supplier como una instrucción para ejecutarse más adelante cuando sea necesario.
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();
};
Aquí, el código dentro del Supplier (generación de contraseña) no se ejecuta de inmediato. En cambio, se indica: "Cuando se solicite, así es como se generará la contraseña." Ahora, al llamar a get() sobre este Supplier:
String generatedPassword = passwordSupplier.get();
Solo entonces se ejecuta el código dentro de Supplier y se genera la contraseña. Esto es ejecución perezosa.
Responsabilidades clave
1. ¿Qué hace la interfaz Supplier en Java?
2. ¿Qué sucede si llamas al método get() dos veces en el mismo objeto Supplier?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 2.33
Supplier: Generación de Datos
Desliza para mostrar el menú
A continuación se muestra cómo se implementa la interfaz funcional Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
La responsabilidad principal del método get() es devolver un objeto de tipo T sin recibir ningún parámetro.
Uso práctico de Supplier
Supplier se utiliza frecuentemente en situaciones donde los datos deben generarse bajo demanda. Esto resulta útil para inicialización diferida, generación de valores aleatorios o obtención de valores desde una fuente externa.
A continuación, se presenta un sistema que genera contraseñas aleatorias. Utilizando la interfaz funcional Supplier, es posible organizar fácilmente la generación de contraseñas a solicitud.
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); } }
Se crea un Supplier que genera una contraseña aleatoria de 12 caracteres. La expresión lambda dentro del Supplier utiliza la clase Random para seleccionar caracteres aleatorios de una cadena.
El método get() activa esta lógica de generación de contraseñas solo cuando es necesario, permitiendo la generación perezosa de valores.
Generación perezosa
Inicialmente, se crea el Supplier, pero el código dentro de él no se ejecuta de inmediato. Esta es una característica importante. En lugar de ejecutar alguna lógica de inmediato (por ejemplo, generar una contraseña), simplemente se registra dentro del Supplier como una instrucción para ejecutarse más adelante cuando sea necesario.
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();
};
Aquí, el código dentro del Supplier (generación de contraseña) no se ejecuta de inmediato. En cambio, se indica: "Cuando se solicite, así es como se generará la contraseña." Ahora, al llamar a get() sobre este Supplier:
String generatedPassword = passwordSupplier.get();
Solo entonces se ejecuta el código dentro de Supplier y se genera la contraseña. Esto es ejecución perezosa.
Responsabilidades clave
1. ¿Qué hace la interfaz Supplier en Java?
2. ¿Qué sucede si llamas al método get() dos veces en el mismo objeto Supplier?
¡Gracias por tus comentarios!