Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Supplier: Datan Generointi | Osio
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Stream API Javassa

bookSupplier: Datan Generointi

Pyyhkäise näyttääksesi valikon

Näin toteutetaan Supplier-funktionaalinen rajapinta:

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

get()-metodin keskeinen tehtävä on palauttaa olio tyyppiä T ilman, että se ottaa vastaan 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 laiskan alustuksen, satunnaisarvojen generoinnin tai arvojen hakemisen ulkoisesta lähteestä yhteydessä.

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 suoritu välittömästi. Tämä on tärkeä ominaisuus. Sen sijaan, että suoritettaisiin jokin logiikka heti (esim. salasanan generointi), tallennetaan se 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." Nyt, kun kutsut get()-metodia tälle Supplier:

String generatedPassword = passwordSupplier.get();

Vasta silloin Supplier-rajapinnan sisällä oleva koodi suoritetaan, ja salasana luodaan. Tämä on laiskaa suoritusta.

Keskeiset vastuualueet

1. Mitä Supplier-rajapinta tekee Javassa?

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

question mark

Mitä Supplier-rajapinta tekee Javassa?

Select the correct answer

question mark

Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalle Supplier-oliolle?

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

Osio 1. Luku 12
some-alt