reduce
- Java kursu
- İleri seviye
- Ders 4/82
- 5 dk
reduce ile akümülasyonu öğrenirsin.
Akışı tek değere indirgeme: reduce
reduce akıştaki tüm elemanları tek bir sonucu birleştirir. İki parametreli sürüm bir kimlik değeri ve bir BinaryOperator<T> alır; sonuç her zaman T türünde olur.
Örnek: prices.stream().reduce(0.0, Double::sum). Burada 0.0 başlangıç değeri, Double::sum ise iki değeri toplayan işleçtir. Boş akışta sonuç kimlik değeri olur; bu yüzden Optional döndüren sürümden farklı olarak güvenle kullanılır.
Üç parametreli reduce
Üç parametreli reduce sürümü: kimlik, biriktirici ve birleştirici. Bu sürüm, sonucun türü akış elemanından farklıysa kullanılır; örneğin bir Stream<String>'i int adede indirgemek için.
Örnek: words.stream().reduce(0, (toplam, w) -> toplam + w.length(), Integer::sum). Burada 0 kimlik, ikinci parametre her dizginin uzunluğunu ekleyen biriktirici, üçüncü ise paralel akışta kısmı sonuçları birleştiren işleçtir. Bu form seri akışta da güvenlidir.
Uygulama Fiyatları reduce ile topla
12.5, 25.0 ve 5.0 değerlerinden oluşan bir List<Double> oluştur. Akışı reduce(0.0, Double::sum) ile topla ve sonucu System.out.println ile yazdır.
Başlangıç kodu
import java.util.List;
// Fiyatları reduce ile topla
// 0.0 kimlik değeriyle başla
// Toplamı yazdırÖrnek çözüm
import java.util.List;
public class SumPrices {
public static void main(String[] args) {
List<Double> prices = List.of(12.5, 25.0, 5.0);
double sum = prices.stream().reduce(0.0, Double::sum);
System.out.println(sum);
}
}Beklenen çıktı
42.5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 reduce çağrısını tamamla
double sum = prices.stream()
.reduce(____, Double::sum);
double sum = prices.stream()
.reduce(0.0, Double::sum);
Açıklama: Toplama için kimlik 0.0'dır.
2 reduce sürümlerini eşleştir
| Kavram | Anlamı |
|---|---|
reduce(BinaryOperator) |
Optional<T> döndürür |
reduce(identity, op) |
T döndürür |
reduce(id, acc, comb) |
Farklı tür döndürür |
3 Hangi reduce aşırı yüklemesi Optional<T> döndürür?
- reduce(identity, BinaryOperator)
- reduce(BinaryOperator) Doğru cevap
- reduce(identity, acc, comb)
- reduce(identity, mapper)
Açıklama: Tek parametreli reduce(BinaryOperator) Optional<T> döndürür.