Java Academy · leksjon

Supplier og Consumer

Produser og konsumer verdier

Leksjon 2 av 413 trinn

Supplier og Consumer er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva Supplier gjør

Supplier<T> tar ingen argumenter og produserer en verdi av typen T.

  • Metoden er T get().
  • Perfekt for lat eller utsatt oppretting av verdier.
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<String> greeting = () -> "Hello!";
        System.out.println(greeting.get());
    }
}

Suppliers evalueres ved behov

Koden inne i en Supplier kjøres først når get kalles. Dette gjør Supplier-objekter ideelle for kostbare standardverdier De kanskje aldri trenger.

import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<Integer> expensive = () -> {
            System.out.println("computing...");
            return 42;
        };
        System.out.println("before get");
        System.out.println(expensive.get());
    }
}

Supplier for standardverdier

Mange API-er tar imot en Supplier slik at de kan beregne en verdi først når det er nødvendig, for eksempel Optional.orElseGet.

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        Optional<String> name = Optional.empty();
        System.out.println(name.orElseGet(() -> "default"));
    }
}

Hva Consumer gjør

Consumer<T> tar imot en verdi og returnerer ingenting (void).

  • Metoden er void accept(T t).
  • Brukes til sideeffekter som utskrift eller logging.
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> printer = s -> System.out.println("Got: " + s);
        printer.accept("data");
    }
}

Consumer med forEach

Det vanligste stedet De møter Consumer, er i Iterable.forEach og Stream.forEach.

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> items = List.of("a", "b", "c");
        items.forEach(item -> System.out.println(item));
    }
}

Lenke sammen Consumers med andThen

Consumer støtter andThen, som kjører to consumers etter hverandre på samme inndata.

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> first = s -> System.out.println("upper: " + s.toUpperCase());
        Consumer<String> second = s -> System.out.println("len: " + s.length());
        first.andThen(second).accept("hello");
    }
}

BiConsumer for to inndata

BiConsumer<T, U> tar imot to argumenter og returnerer ingenting. Map.forEach bruker det til å iterere over nøkkel-verdi-par.

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> ages = Map.of("Ann", 30, "Bob", 25);
        ages.forEach((name, age) -> System.out.println(name + "=" + age));
    }
}

Metodereferanser som Consumers

En metodereferanse som System.out::println er en ryddig Consumer.

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = List.of(1, 2, 3);
        nums.forEach(System.out::println);
    }
}

Kombinere Supplier og Consumer

En Supplier kan sende den produserte verdien direkte videre til en Consumer, slik at De får en enkel flyt fra produksjon til forbruk.

import java.util.function.Supplier;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Supplier<String> source = () -> "payload";
        Consumer<String> sink = s -> System.out.println("received " + s);
        sink.accept(source.get());
    }
}

Supplier som returnerer objekter

Konstruktører oppretter naturlige suppliers via ClassName::new når det ikke trengs noen argumenter.

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<List<String>> factory = ArrayList::new;
        List<String> list = factory.get();
        list.add("x");
        System.out.println(list);
    }
}

Bivirkninger kontra rene funksjoner

Husk forskjellen:

  • Supplier: ingen inndata, produserer et resultat.
  • Consumer: tar imot inndata, produserer ikke noe resultat (bivirkning).
  • Function: tar imot inndata og returnerer et resultat.
import java.util.function.Supplier;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Supplier<Integer> dice = () -> 4;
        Consumer<Integer> show = n -> System.out.println("rolled " + n);
        show.accept(dice.get());
    }
}

Kort kontroll

Hvilket funksjonelt grensesnitt tar ingen argumenter og returnerer en verdi?

Oppsummering

De produserte og konsumerte verdier på en funksjonell måte:

  • Supplier<T> bruker get() til lat produksjon.
  • Consumer<T> bruker accept() til bivirkninger og kan kjedes med andThen.
  • BiConsumer<T,U> håndterer to inndata, slik som i Map.forEach.
  • Metodereferanser og konstruktørreferanser gjør begge deler mer konsise.
Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Supplier og Consumer» gratis?

Ja – hele teksten i «Supplier og Consumer» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Supplier og Consumer»?

Produser og konsumer verdier Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Supplier og Consumer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Function og BiFunction
  2. Supplier og Consumer
  3. Predicate og komposisjon
  4. Egendefinerte funksjonelle grensesnitt
← Tilbake til Java Academy