Supplier: Geração de Dados
Veja como a interface funcional Supplier é implementada:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
A principal responsabilidade do método get() é retornar um objeto do tipo T sem receber nenhum parâmetro.
Uso Prático de Supplier
Supplier é frequentemente utilizado em situações onde os dados precisam ser gerados sob demanda. Isso pode ser útil para inicialização preguiçosa, geração de valores aleatórios ou obtenção de valores de uma fonte externa.
Vamos criar um sistema que gera senhas aleatórias. Utilizando a interface funcional Supplier, é possível organizar facilmente a geração de senhas sob solicitação.
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); } }
Você cria um Supplier que gera uma senha aleatória de 12 caracteres. A expressão lambda dentro do Supplier utiliza a classe Random para selecionar caracteres aleatórios de uma string.
O método get() aciona essa lógica de geração de senha apenas quando necessário, permitindo a geração preguiçosa de valores.
Geração Preguiçosa
Inicialmente, você cria o Supplier, mas o código dentro dele não é executado imediatamente. Esta é uma característica importante. Em vez de executar alguma lógica imediatamente (por exemplo, gerar uma senha), você simplesmente registra isso dentro do Supplier como uma instrução a ser executada posteriormente quando necessário.
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();
};
Aqui, o código dentro do Supplier (geração de senha) não é executado imediatamente. Em vez disso, indica-se: "Quando solicitado, esta será a forma de gerar a senha." Agora, ao chamar get() neste Supplier:
String generatedPassword = passwordSupplier.get();
Só então o código dentro do Supplier é executado, e a senha é gerada. Isso é uma execução preguiçosa.
Principais Responsabilidades
1. O que a interface Supplier faz em Java?
2. O que acontece se você chamar o método get() duas vezes no mesmo objeto Supplier?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 2.33
Supplier: Geração de Dados
Deslize para mostrar o menu
Veja como a interface funcional Supplier é implementada:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
A principal responsabilidade do método get() é retornar um objeto do tipo T sem receber nenhum parâmetro.
Uso Prático de Supplier
Supplier é frequentemente utilizado em situações onde os dados precisam ser gerados sob demanda. Isso pode ser útil para inicialização preguiçosa, geração de valores aleatórios ou obtenção de valores de uma fonte externa.
Vamos criar um sistema que gera senhas aleatórias. Utilizando a interface funcional Supplier, é possível organizar facilmente a geração de senhas sob solicitação.
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); } }
Você cria um Supplier que gera uma senha aleatória de 12 caracteres. A expressão lambda dentro do Supplier utiliza a classe Random para selecionar caracteres aleatórios de uma string.
O método get() aciona essa lógica de geração de senha apenas quando necessário, permitindo a geração preguiçosa de valores.
Geração Preguiçosa
Inicialmente, você cria o Supplier, mas o código dentro dele não é executado imediatamente. Esta é uma característica importante. Em vez de executar alguma lógica imediatamente (por exemplo, gerar uma senha), você simplesmente registra isso dentro do Supplier como uma instrução a ser executada posteriormente quando necessário.
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();
};
Aqui, o código dentro do Supplier (geração de senha) não é executado imediatamente. Em vez disso, indica-se: "Quando solicitado, esta será a forma de gerar a senha." Agora, ao chamar get() neste Supplier:
String generatedPassword = passwordSupplier.get();
Só então o código dentro do Supplier é executado, e a senha é gerada. Isso é uma execução preguiçosa.
Principais Responsabilidades
1. O que a interface Supplier faz em Java?
2. O que acontece se você chamar o método get() duas vezes no mesmo objeto Supplier?
Obrigado pelo seu feedback!