Supplier ve Consumer
Değerler üretin ve tüketin
Supplier ve Consumer, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Üretici Ne Yapar
Supplier<T> hiçbir bağımsız değişken almaz ve T türünde bir değer üretir.
- Metodu
T get()şeklindedir. - Tembel veya ertelenmiş değer oluşturma için idealdir.
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Supplier<String> greeting = () -> "Hello!";
System.out.println(greeting.get());
}
}Üreticiler Tembel Çalışır
Bir Supplier içindeki kod yalnızca get çağrıldığında çalışır. Bu nedenle üreticiler, hiç gerekmeyebilecek maliyetli varsayılan değerler için idealdir.
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());
}
}Varsayılan Değerler için Üretici
Birçok API, yalnızca gerektiğinde değer hesaplayabilmek için Supplier kabul eder; Optional.orElseGet buna örnektir.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> name = Optional.empty();
System.out.println(name.orElseGet(() -> "default"));
}
}Tüketici Ne Yapar
Consumer<T> bir değer kabul eder ve hiçbir şey döndürmez.
- Metodu
void accept(T t)şeklindedir. - Yazdırma veya günlük kaydı tutma gibi yan etkiler için kullanılır.
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");
}
}forEach ile Tüketici
Consumer ile en sık Iterable.forEach ve Stream.forEach içinde karşılaşırsınız.
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));
}
}Tüketicileri andThen ile Zincirleme
Consumer, aynı girdi üzerinde iki tüketiciyi sırayla çalıştıran andThen işlemini destekler.
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");
}
}İki Girdi için BiConsumer
BiConsumer<T, U> iki bağımsız değişken kabul eder ve hiçbir şey döndürmez. Map.forEach, anahtar-değer çiftleri üzerinde yineleme yapmak için bunu kullanır.
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));
}
}Tüketici Olarak Metot Başvuruları
System.out::println gibi bir metot başvurusu, temiz bir Consumer örneğidir.
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);
}
}Üretici ile Tüketiciyi Birleştirme
Bir Supplier, ürettiği değeri doğrudan bir Consumer'a aktarabilir ve basit bir üretip ardından tüketme akışı oluşturabilir.
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());
}
}Nesne Döndüren Tedarikçi
Hiçbir bağımsız değişken gerekmediğinde kurucular, ClassName::new aracılığıyla doğal tedarikçiler oluşturur.
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);
}
}Yan Etkiler ve Saf İşlevler
Şu karşıtlığı unutmayınız:
Supplier: girdi almaz, çıktı üretir.Consumer: girdi alır, çıktı üretmez (yan etki oluşturur).Function: girdi alır ve çıktı döndürür.
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());
}
}Hızlı Kontrol
Hangi işlevsel arayüz hiç bağımsız değişken almaz ve bir değer döndürür?
Özet
Değerleri işlevsel biçimde ürettiniz ve tükettiniz:
Supplier<T>, tembel üretim içinget()kullanır.Consumer<T>, yan etkiler içinaccept()kullanır veandThenile zincirlenir.BiConsumer<T,U>,Map.forEachörneğinde olduğu gibi iki girdiyi işler.- Yöntem referansları ve kurucu referansları her iki kullanımı da kısa hâle getirir.
Sıkça Sorulan Sorular
“Supplier ve Consumer” dersi ücretsiz mi?
Evet — “Supplier ve Consumer” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Supplier ve Consumer” dersinde ne öğreneceğim?
Değerler üretin ve tüketin Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Supplier ve Consumer” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Function ve BiFunction
- Supplier ve Consumer
- Predicate ve Birleştirme
- Özel İşlevsel Arayüzler