Supplier dan Consumer
Hasilkan dan konsumsi nilai.
Supplier dan Consumer adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Yang Dilakukan Supplier
Supplier<T> tidak menerima argumen apa pun dan menghasilkan nilai bertipe T.
- Metodenya adalah
T get(). - Sangat cocok untuk pembuatan nilai yang ditunda atau dilakukan secara malas.
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Supplier<String> greeting = () -> "Hello!";
System.out.println(greeting.get());
}
}Supplier Bersifat Malas
Kode di dalam Supplier hanya dijalankan ketika get dipanggil. Hal ini membuat supplier ideal untuk nilai bawaan yang mahal untuk dibuat dan mungkin tidak pernah diperlukan.
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 untuk Nilai Bawaan
Banyak API menerima Supplier agar dapat menghitung nilai hanya ketika diperlukan, seperti pada 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"));
}
}Yang Dilakukan Consumer
Consumer<T> menerima sebuah nilai dan tidak mengembalikan apa pun (void).
- Metodenya adalah
void accept(T t). - Digunakan untuk efek samping seperti mencetak atau melakukan pencatatan.
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 dengan forEach
Tempat paling umum Anda menjumpai Consumer adalah Iterable.forEach dan 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));
}
}Merangkai Consumer dengan andThen
Consumer mendukung andThen, yang menjalankan dua consumer secara berurutan pada masukan yang sama.
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 untuk Dua Masukan
BiConsumer<T, U> menerima dua argumen dan tidak mengembalikan apa pun. Map.forEach menggunakannya untuk mengiterasi pasangan kunci-nilai.
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));
}
}Referensi Metode sebagai Consumer
Referensi metode seperti System.out::println merupakan Consumer yang bersih dan ringkas.
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);
}
}Menggabungkan Supplier dan Consumer
Supplier dapat langsung meneruskan nilai yang dihasilkannya ke Consumer, sehingga membentuk alur sederhana: menghasilkan lalu menggunakan.
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());
}
}Penyedia yang Mengembalikan Objek
Konstruktor menjadi penyedia alami melalui ClassName::new jika tidak diperlukan argumen.
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);
}
}Efek Samping vs Fungsi Murni
Ingat perbedaannya:
Supplier: tidak menerima masukan, menghasilkan keluaran.Consumer: menerima masukan, tetapi tidak menghasilkan keluaran (efek samping).Function: menerima masukan dan mengembalikan keluaran.
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());
}
}Pemeriksaan Singkat
Antarmuka fungsional mana yang tidak menerima argumen dan mengembalikan nilai?
Ringkasan
Anda menghasilkan dan menggunakan nilai secara fungsional:
Supplier<T>menggunakanget()untuk menghasilkan nilai secara tertunda.Consumer<T>menggunakanaccept()untuk efek samping dan dapat dirangkai denganandThen.BiConsumer<T,U>menangani dua masukan, seperti padaMap.forEach.- Referensi metode dan referensi konstruktor membuat keduanya menjadi ringkas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Supplier dan Consumer” gratis?
Ya — teks lengkap “Supplier dan Consumer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Supplier dan Consumer”?
Hasilkan dan konsumsi nilai. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Supplier dan Consumer” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Function dan BiFunction
- Supplier dan Consumer
- Predicate dan Komposisi
- Antarmuka Fungsional Kustom