Giriş
Şu satırı dahil ederiz.
Bu anlamda Collectors.groupingBy() ve Collectors.toMap() birbirlerinden ayrılırlar çünkü toMap() hem keyMapper hem de valueMapper nesnesi alır.
Örnek
Şöyle yaparız.
Value değerlerine göre gruplamak için şöyle yaparız.
Şu satırı dahil ederiz.
import static java.util.stream.Collectors.groupingBy;
İmzası şöyle.
Sadece keyMapper verilen groupingBy() metodunu çağırırsak Map'in ikinci parametresi her zaman List olur. List'in tipi nesnenin kendisidir. Yani bu metod bir nesneyi kendi içindeki bir alana göre çoklu bölümlere (multiple partitions) ayırmak için kullanılır.public static <T, K> Collector<T, ?, Map<K, List<T>>>
groupingBy(Function<? super T, ? extends K> classifier)
Açıklaması şöyle. Yani nesneyi kendi içindeki bir alana göre MultiMap (Map of List) haline getirirgroupingBy metodu - classifier yani keyMapperReturns a Collector implementing a "group by" operation on input elements of type T, grouping elements according to a classification function, and returning the results in a Map.
Bu anlamda Collectors.groupingBy() ve Collectors.toMap() birbirlerinden ayrılırlar çünkü toMap() hem keyMapper hem de valueMapper nesnesi alır.
Örnek
Şöyle yaparız.
Map<A> result = list.stream()
.collect(Collectors.groupingBy(A::getId,...))
.values();
toMap ile şöyle yaparız.Map<Integer, A> result = listOfA.stream()
.collect(Collectors.toMap(A::getId, ..., ...));
ÖrnekValue değerlerine göre gruplamak için şöyle yaparız.
Map<String, Integer> map = new HashMap<>();
map.put("cat", 1);
map.put("kid", 3);
map.put("girl", 3);
map.put("adult", 2);
map.put("human", 5);
map.put("dog", 2);
map.put("boy", 2);
Map<Integer, List<String>> newMap = map.keySet()
.stream()
.collect(Collectors.groupingBy(map::get));
System.out.println(newMap);
> {1=[cat], 2=[adult, dog, boy], 3=[kid, girl], 5=[human]}
Hiç yorum yok:
Yorum Gönder