Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Supplier: Geração de Dados | Fundamentos e Capacidades Funcionais da Stream API
Stream API

bookSupplier: 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

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); } }

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?

question mark

O que a interface Supplier faz em Java?

Select the correct answer

question mark

O que acontece se você chamar o método get() duas vezes no mesmo objeto Supplier?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 12

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.33

bookSupplier: 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

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); } }

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?

question mark

O que a interface Supplier faz em Java?

Select the correct answer

question mark

O que acontece se você chamar o método get() duas vezes no mesmo objeto Supplier?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 12
some-alt