Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
import java.util.stream.Collectors;
Sınıf hazır tanımlı Collector nesneleri için factory gibi çalışır. Açıklaması şöyleCollect is an extremely useful terminal operation to transform the elements of the stream into a different kind of result, e.g. a List, Set or Map. Collect accepts a Collector which consists of four different operations: a supplier, an accumulator, a combiner and a finisher. This sounds super complicated at first, but the good part is Java 8 supports various built-in collectors via the Collectors class. So for the most common operations you don't have to implement a collector yourself.
Collection Yaratan Metodlar
Bu metodlar toX() şeklindedir
- toList()
- toMap() - keyMapper + valueMapper
- toMap() - keyMapper + valueMapper + Merge Function - Duplicate değerler varsa
- toSet()
- toMap() - keyMapper + valueMapper + Merge Function - Duplicate değerler varsa
- toSet()
Bölümleyen Metodlar
- groupingBy()
Tekil Hale Getiren Metodlar
Bu metodlar ing() son eki ile bitiyor
- joining()
- reducing ()
- teeing()
Max/Min Metodlar
- maxBy()
- minBy()
Summing Metodlar
Bu metodlar summingX() şeklindedir.
- summingInt()
- summingDouble()
- summingLong()
Averaging Metodlar
Bu metodlar averagingX() şeklindedir.
averagingInt()
averagingDouble()
averagingLong()
Summarizing Metodlar
- summarizingInt() - IntSummaryStatistics döner
averagingDouble
Şöyle yaparız.
Collectors collectingAndThen metodu yazısına taşıdımŞöyle yaparız.
Double[] x = {5.4, 5.56, 1.0};
double avg = Arrays.stream(x).collect(Collectors.averagingDouble(n -> n));
collectingAndThen metoduflatMapping metodu
joining metodu - delimeter
Collectors.joining metodu yazısına taşıdım
groupingBy metodu - classifier yani keyMapper
Collectors groupingBy metodu - Map of List yazısına taşıdım.
groupingBy metodu - classifier yani keyMapper + downstream yani Collector
Collectors groupingBy metodu - Map of Collector yazısına taşıdım.
groupingBy metodu - classifier yani keyMapper + mapFactory + downstream yani Collector
Collectors groupingBy metodu - İstenilen Map Tipi of Collector yazısına taşıdım.
groupingBy metodu + groupingBy
İç içe gruplamayı sağlar. İlk groupingBy Map<String,...> yapısını oluşturur. İkinci groupingBy içteki Map<String,...> yapısını oluşturur
Stream'deki nesneleri bir Map içine gruplar. Daha sonra Map'teki her bir elemanı bir kere daha dönüştürme imkanı tanır.
Elimizde bir Task ve Task'lara ait Job nesneleri olsun.
Şu satırı dahil ederiz.
reducing metodu
Tüm elemanları bir işleme sokarak tek sonuç döner.
Örnek
Aynı değere sahip iki metod varsa null dönmesi için şöyle yaparız.
Collectors.teeing metodu yazısına taşıdım
Collectors groupingBy metodu - Map of List yazısına taşıdım.
groupingBy metodu - classifier yani keyMapper + downstream yani Collector
Collectors groupingBy metodu - Map of Collector yazısına taşıdım.
groupingBy metodu - classifier yani keyMapper + mapFactory + downstream yani Collector
Collectors groupingBy metodu - İstenilen Map Tipi of Collector yazısına taşıdım.
groupingBy metodu + groupingBy
İç içe gruplamayı sağlar. İlk groupingBy Map<String,...> yapısını oluşturur. İkinci groupingBy içteki Map<String,...> yapısını oluşturur
Map<String, Map<String, List<Student>>> map= studs.collect(Collectors.groupingBy(
Student::getName,Collectors.groupingBy(Student::getLocation)));
groupingBy metodu+ collectionAndThenStream'deki nesneleri bir Map içine gruplar. Daha sonra Map'teki her bir elemanı bir kere daha dönüştürme imkanı tanır.
Elimizde bir Task ve Task'lara ait Job nesneleri olsun.
public class Task { int taskId; List<Job> jobList; }
Her Job ise bir agent tarafından çalıştırılabiliyor olsun.// in class Job
int getAgentId() { // return the "agent" who is responsible for @param job }
Her agent'a düşen task'ları şöyle gruplamak isteyelim
// in class Partition; `Integer` for "agent" id
Map<Integer, Task> partition(Task task) { }
Şöyle yaparız.
task.getJobList().stream()
.collect(
groupingBy(
Job::getAgentId,//agentID -> Job map
collectingAndThen(toList(), jobs -> new Task(id, jobs))));
mapping metoduŞu satırı dahil ederiz.
import static java.util.stream.Collectors.mapping;
Örnek
Elimizde şöyle bir map olsun.
Elimizde şöyle bir map olsun.
ImmutableListMultimap<String, Character> immutableMultiMap
Bu yapıyı şuna çevirmek isteyelim.Map<String, List<Character>> resultŞöyle yaparız. mapping ile her eleman Map içindeki Entry<String,Character> yapısından kurtulup List<Character> yapısına dönüşür.
Map<String, List<Character>> result = immutableMultiMap.entries().stream()
.collect(groupingBy(Entry::getKey, TreeMap::new,
mapping(Entry::getValue, toList())));
reducing metodu
Tüm elemanları bir işleme sokarak tek sonuç döner.
Örnek
Aynı değere sahip iki metod varsa null dönmesi için şöyle yaparız.
Optional<String> res = list.stream()
.filter(item -> item.startsWith("A"))
.limit(2)
.collect(Collectors.reducing((s1, s2) -> null));
teeing metoduCollectors.teeing metodu yazısına taşıdım
Hiç yorum yok:
Yorum Gönder