Supplier und Consumer
Werte erzeugen und verarbeiten
Supplier und Consumer ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was Supplier macht
Supplier<T> nimmt keine Argumente entgegen und erzeugt einen Wert vom Typ T.
- Seine Methode ist
T get(). - Ideal für die verzögerte oder aufgeschobene Erzeugung von Werten.
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Supplier<String> greeting = () -> "Hello!";
System.out.println(greeting.get());
}
}Supplier werden verzögert ausgeführt
Der Code innerhalb eines Supplier wird erst ausgeführt, wenn get aufgerufen wird. Dadurch eignen sich Supplier ideal für aufwendige Standardwerte, die möglicherweise nie benötigt werden.
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 für Standardwerte
Viele APIs akzeptieren einen Supplier, damit sie einen Wert erst bei Bedarf berechnen können, etwa 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"));
}
}Was Consumer macht
Consumer<T> akzeptiert einen Wert und gibt nichts zurück (void).
- Seine Methode ist
void accept(T t). - Verwendet wird er für Seiteneffekte wie die Ausgabe oder Protokollierung.
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 mit forEach
Am häufigsten begegnet Ihnen Consumer bei Iterable.forEach und 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));
}
}Consumer mit andThen verketten
Consumer unterstützt andThen, das zwei Consumer nacheinander mit derselben Eingabe ausführt.
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 für zwei Eingaben
BiConsumer<T, U> akzeptiert zwei Argumente und gibt nichts zurück. Map.forEach verwendet es, um Schlüssel-Wert-Paare zu durchlaufen.
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));
}
}Methodenreferenzen als Consumer
Eine Methodenreferenz wie System.out::println ist ein eleganter 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);
}
}Supplier und Consumer kombinieren
Ein Supplier kann seinen erzeugten Wert direkt an einen Consumer weitergeben und so einen einfachen Ablauf aus Erzeugen und Verarbeiten bilden.
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, die Objekte zurückgeben
Konstruktoren eignen sich als natürliche Supplier über ClassName::new, wenn keine Argumente benötigt werden.
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);
}
}Seiteneffekte vs. reine Funktionen
Behalten Sie den Unterschied im Gedächtnis:
Supplier: keine Eingabe, erzeugt eine Ausgabe.Consumer: nimmt eine Eingabe entgegen, erzeugt keine Ausgabe (Seiteneffekt).Function: nimmt eine Eingabe entgegen und gibt eine Ausgabe zurück.
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());
}
}Schnelltest
Welches funktionale Interface nimmt keine Argumente entgegen und gibt einen Wert zurück?
Zusammenfassung
Sie haben Werte funktional erzeugt und konsumiert:
Supplier<T>verwendetget()für die verzögerte Erzeugung.Consumer<T>verwendetaccept()für Seiteneffekte und lässt sich mitandThenverketten.BiConsumer<T,U>verarbeitet zwei Eingaben, wie beiMap.forEach.- Methodenreferenzen und Konstruktorreferenzen machen beides kompakt.
Häufig gestellte Fragen
Ist die Lektion „Supplier und Consumer“ kostenlos?
Ja — der vollständige Text von „Supplier und Consumer“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Supplier und Consumer“?
Werte erzeugen und verarbeiten Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Supplier und Consumer“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Function und BiFunction
- Supplier und Consumer
- Predicate und Komposition
- Benutzerdefinierte funktionale Interfaces