CodeBlanks Logo Icon CodeBlanks

partitioningBy

Collectors.partitioningBy ile ikiye bölmeyi öğrenirsin.

İkiye bölme: partitioningBy

Collectors.partitioningBy elemanları tek bir koşula göre iki kümeye ayırır. Koşul bir Predicate<T>'dir ve sonuç her zaman Map<Boolean, List<T>> olur: true anahtarı koşulu sağlayanları, false anahtarı sağlamayanları tutar.

Örnek: numbers.stream().collect(Collectors.partitioningBy(n -> n % 2 == 0)). Burada çift sayılar true kümesine, tekler false kümesine gider. Bu yöntem groupingBy'den farklı olarak yalnızca iki grup üretir.

partitioningBy ile alt toplayıcı

İki parametreli aşırı yükleme, her bölüme bir alt toplayıcı uygular. Bu, sadece listeleri değil; örneğin her bölümün adedini ya da ortalamasını almak için kullanışlıdır.

Örnek: Collectors.partitioningBy(n -> n % 2 == 0, Collectors.counting()). Bu çağrı Map<Boolean, Long> döndürür: true çift sayısı, false tek sayısıdır. Böylece ayrı bir akış işlemine gerek kalmadan her bölümün özeti tek satırda alınır.

Uygulama Sayıları çift/tek olarak böl

1, 2, 3, 4, 5 sayılarından oluşan bir liste oluştur. Akışı Collectors.partitioningBy(n -> n % 2 == 0) ile böl. Sonra false ve true anahtarların adetlerini ayrı satırlarda System.out.println ile yazdır; önce false: sonra true: satırı gelsin.

Başlangıç kodu

Main.java
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

// Sayıları çift/tek olarak böl
// Collectors.partitioningBy kullan
// Her bölümün adedini yazdır

Örnek çözüm

Main.java
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class PartitionNumbers {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);
        Map<Boolean, List<Integer>> parts = numbers.stream()
            .collect(Collectors.partitioningBy(n -> n % 2 == 0));
        System.out.println("false: " + parts.get(false).size());
        System.out.println("true: " + parts.get(true).size());
    }
}

Beklenen çıktı

false: 3
true: 2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 partitioningBy kavramlarını eşleştir

Kavram Anlamı
partitioningBy İki kümeye böler
Predicate<T> Koşul işlevi
true anahtarı Koşulu sağlayanlar
false anahtarı Sağlamayanlar

2 partitioningBy(n -> n % 2 == 0) hangi türü döndürür?

  • List<Integer>
  • Map<Boolean, Long>
  • Map<Boolean, List<Integer>> Doğru cevap
  • Optional<Integer>

Açıklama: Tek parametreli partitioningBy Map<Boolean, List<T>> döndürür.

3 partitioningBy çağrısını tamamla

Soru
Map<Boolean, List<Integer>> parts = numbers.stream()
    .collect(Collectors.partitioningBy(____));
Cevap
Map<Boolean, List<Integer>> parts = numbers.stream()
    .collect(Collectors.partitioningBy(n -> n % 2 == 0));

Açıklama: Bu koşul çift sayıları true kümesine koyar.

İleri seviye bölümündeki tüm dersler