Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Toimittaja: Datan Generointi | Stream API:n Perusteet ja Toiminnalliset Ominaisuudet
Stream API

bookToimittaja: Datan Generointi

Tässä on esimerkki siitä, miten Supplier-funktionaalinen rajapinta toteutetaan:

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

get()-menetelmän keskeinen tehtävä on palauttaa tyyppiä T oleva olio ilman parametreja.

Supplierin käytännön soveltaminen

Supplier-rajapintaa käytetään usein tilanteissa, joissa data täytyy luoda tarpeen mukaan. Tämä on hyödyllistä esimerkiksi laiskassa alustuksessa, satunnaisarvojen generoinnissa tai arvojen hakemisessa ulkoisesta lähteestä.

Luodaan järjestelmä, joka generoi satunnaisia salasanoja. Käyttämällä Supplier-funktionaalista rajapintaa voidaan helposti järjestää salasanojen generointi pyynnöstä.

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

Luodaan Supplier, joka tuottaa satunnaisen salasanan ja jonka pituus on 12 merkkiä. Supplier-rajapinnan sisällä oleva lambda-lauseke käyttää Random-luokkaa valitakseen satunnaisia merkkejä merkkijonosta.

get()-metodi käynnistää tämän salasanan generointilogiikan vain tarvittaessa, mahdollistaen arvojen laiskan generoinnin.

Laiska generointi

Aluksi luodaan Supplier, mutta sen sisällä oleva koodi ei suoriteta välittömästi. Tämä on tärkeä ominaisuus. Sen sijaan, että jokin logiikka suoritettaisiin heti (esim. salasanan generointi), se tallennetaan Supplier-olioon ohjeena, joka suoritetaan myöhemmin tarvittaessa.

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

Tässä Supplier-rajapinnan sisällä oleva koodi (salasanan generointi) ei suoriteta välittömästi. Sen sijaan määritellään, "Kun joku pyytää, näin salasana generoidaan." Kun kutsutaan get()-metodia tälle Supplier-oliolle:

String generatedPassword = passwordSupplier.get();

Vasta sitten koodi suoritetaan Supplier-rajapinnassa, ja salasana luodaan. Tämä on laiskaa suorittamista.

Keskeiset vastuualueet

1. Mitä Supplier-rajapinta tekee Javassa?

2. Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalla Supplier-oliolla?

question mark

Mitä Supplier-rajapinta tekee Javassa?

Select the correct answer

question mark

Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalla Supplier-oliolla?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 12

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 2.33

bookToimittaja: Datan Generointi

Pyyhkäise näyttääksesi valikon

Tässä on esimerkki siitä, miten Supplier-funktionaalinen rajapinta toteutetaan:

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

get()-menetelmän keskeinen tehtävä on palauttaa tyyppiä T oleva olio ilman parametreja.

Supplierin käytännön soveltaminen

Supplier-rajapintaa käytetään usein tilanteissa, joissa data täytyy luoda tarpeen mukaan. Tämä on hyödyllistä esimerkiksi laiskassa alustuksessa, satunnaisarvojen generoinnissa tai arvojen hakemisessa ulkoisesta lähteestä.

Luodaan järjestelmä, joka generoi satunnaisia salasanoja. Käyttämällä Supplier-funktionaalista rajapintaa voidaan helposti järjestää salasanojen generointi pyynnöstä.

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

Luodaan Supplier, joka tuottaa satunnaisen salasanan ja jonka pituus on 12 merkkiä. Supplier-rajapinnan sisällä oleva lambda-lauseke käyttää Random-luokkaa valitakseen satunnaisia merkkejä merkkijonosta.

get()-metodi käynnistää tämän salasanan generointilogiikan vain tarvittaessa, mahdollistaen arvojen laiskan generoinnin.

Laiska generointi

Aluksi luodaan Supplier, mutta sen sisällä oleva koodi ei suoriteta välittömästi. Tämä on tärkeä ominaisuus. Sen sijaan, että jokin logiikka suoritettaisiin heti (esim. salasanan generointi), se tallennetaan Supplier-olioon ohjeena, joka suoritetaan myöhemmin tarvittaessa.

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

Tässä Supplier-rajapinnan sisällä oleva koodi (salasanan generointi) ei suoriteta välittömästi. Sen sijaan määritellään, "Kun joku pyytää, näin salasana generoidaan." Kun kutsutaan get()-metodia tälle Supplier-oliolle:

String generatedPassword = passwordSupplier.get();

Vasta sitten koodi suoritetaan Supplier-rajapinnassa, ja salasana luodaan. Tämä on laiskaa suorittamista.

Keskeiset vastuualueet

1. Mitä Supplier-rajapinta tekee Javassa?

2. Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalla Supplier-oliolla?

question mark

Mitä Supplier-rajapinta tekee Javassa?

Select the correct answer

question mark

Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalla Supplier-oliolla?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 12
some-alt