Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Supplier: Datagenerering | Grundlæggende og Funktionelle Kapaciteter af Stream API
Stream API

bookSupplier: Datagenerering

Her er, hvordan den funktionelle grænseflade Supplier implementeres:

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

Hovedansvaret for metoden get() er at returnere et objekt af typen T uden at modtage nogen parametre.

Praktisk anvendelse af Supplier

Supplier anvendes ofte i situationer, hvor data skal genereres efter behov. Dette er nyttigt til doven initialisering, generering af tilfældige værdier eller hentning af værdier fra en ekstern kilde.

Lad os oprette et system, der genererer tilfældige adgangskoder. Ved at bruge Supplier funktionelt interface kan du nemt organisere generering af adgangskoder på forespørgsel.

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

Du opretter en Supplier, der genererer en tilfældig adgangskode12 tegn. Lambda-udtrykket inde i Supplier anvender klassen Random til at vælge tilfældige tegn fra en streng.

Metoden get() udløser denne adgangskodegenereringslogik kun, når det er nødvendigt, hvilket muliggør doven generering af værdier.

Doven generering

I første omgang opretter du Supplier, men koden indeni udføres ikke med det samme. Dette er en vigtig egenskab. I stedet for at udføre en logik med det samme (f.eks. generere en adgangskode), registrerer du den blot i Supplier som en instruks, der skal udføres senere, når det er nødvendigt.

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

Her udføres koden inde i Supplier (generering af adgangskode) ikke med det samme. I stedet angives det, "Når nogen anmoder, er det sådan, adgangskoden genereres." Når der nu kaldes get() på denne Supplier:

String generatedPassword = passwordSupplier.get();

Først da udføres koden inde i Supplier, og adgangskoden genereres. Dette er doven eksekvering.

Nøgleansvar

1. Hvad gør Supplier-interfacet i Java?

2. Hvad sker der, hvis du kalder get()-metoden to gange på det samme Supplier-objekt?

question mark

Hvad gør Supplier-interfacet i Java?

Select the correct answer

question mark

Hvad sker der, hvis du kalder get()-metoden to gange på det samme Supplier-objekt?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 12

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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

bookSupplier: Datagenerering

Stryg for at vise menuen

Her er, hvordan den funktionelle grænseflade Supplier implementeres:

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

Hovedansvaret for metoden get() er at returnere et objekt af typen T uden at modtage nogen parametre.

Praktisk anvendelse af Supplier

Supplier anvendes ofte i situationer, hvor data skal genereres efter behov. Dette er nyttigt til doven initialisering, generering af tilfældige værdier eller hentning af værdier fra en ekstern kilde.

Lad os oprette et system, der genererer tilfældige adgangskoder. Ved at bruge Supplier funktionelt interface kan du nemt organisere generering af adgangskoder på forespørgsel.

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

Du opretter en Supplier, der genererer en tilfældig adgangskode12 tegn. Lambda-udtrykket inde i Supplier anvender klassen Random til at vælge tilfældige tegn fra en streng.

Metoden get() udløser denne adgangskodegenereringslogik kun, når det er nødvendigt, hvilket muliggør doven generering af værdier.

Doven generering

I første omgang opretter du Supplier, men koden indeni udføres ikke med det samme. Dette er en vigtig egenskab. I stedet for at udføre en logik med det samme (f.eks. generere en adgangskode), registrerer du den blot i Supplier som en instruks, der skal udføres senere, når det er nødvendigt.

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

Her udføres koden inde i Supplier (generering af adgangskode) ikke med det samme. I stedet angives det, "Når nogen anmoder, er det sådan, adgangskoden genereres." Når der nu kaldes get() på denne Supplier:

String generatedPassword = passwordSupplier.get();

Først da udføres koden inde i Supplier, og adgangskoden genereres. Dette er doven eksekvering.

Nøgleansvar

1. Hvad gør Supplier-interfacet i Java?

2. Hvad sker der, hvis du kalder get()-metoden to gange på det samme Supplier-objekt?

question mark

Hvad gør Supplier-interfacet i Java?

Select the correct answer

question mark

Hvad sker der, hvis du kalder get()-metoden to gange på det samme Supplier-objekt?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 12
some-alt