Java
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.
Örnek çözümü göster
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());
}
}
Kendini test et
-
partitioningBy kavramlarını eşleştir
- partitioningBy
- İki kümeye böler
- Predicate<T>
- Koşul işlevi
- true anahtarı
- Koşulu sağlayanlar
- false anahtarı
- Sağlamayanlar
-
partitioningBy(n -> n % 2 == 0) hangi türü döndürür?
- List<Integer>
- Map<Boolean, Long>
- Map<Boolean, List<Integer>>
- Optional<Integer>
Cevabı göster
Map<Boolean, List<Integer>> — Tek parametreli partitioningBy Map<Boolean, List<T>> döndürür.
-
partitioningBy çağrısını tamamla
Map<Boolean, List<Integer>> parts = numbers.stream()
.collect(Collectors.partitioningBy(____));
Cevabı göster
Map<Boolean, List<Integer>> parts = numbers.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
Sıradaki ders: joining