partitioningBy
- Java kursu
- İleri seviye
- Ders 2/82
- 5 dk
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
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
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
Map<Boolean, List<Integer>> parts = numbers.stream()
.collect(Collectors.partitioningBy(____));
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.