Supplier: 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
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); } }
Du opretter en Supplier, der genererer en tilfældig adgangskode på 12 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?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Supplier: 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
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); } }
Du opretter en Supplier, der genererer en tilfældig adgangskode på 12 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?
Tak for dine kommentarer!