groupingBy と toMap のメモ

Java Stream groupingBy と toMap のメモを今更だけど、テンプレートとしてメモの整理

List<Item> list

groupingBy

Map<String, List<Item>> map = list.stream().collect(Collectors.groupingBy(t->t.name));

ちゃんと書く

Map<String, List<Item>> map 
= list.stream().collect(Collectors.groupingBy(t->t.name , Collectors.mapping(u->u, Collectors.toList())));

TreeMap にしたい。。

Map<String, List<Item>> map = list.stream().collect(Collectors.groupingBy(t->t.name
   , TreeMap<String, List<Item>>::new, Collectors.mapping(u->u, Collectors.toList()) ) );

toMap

Map<String, List<Item>> map1 = list.stream().collect(Collectors.toMap(t->t.name
   , u->new ArrayList<Item>(Collections.singletonList(u))
   , (a, b)->Stream.concat(a.stream(), b.stream()).collect(Collectors.toList())
));

TreeMap にしたい。。

Map<String, List<Item>> map2 = list.stream().collect(Collectors.toMap(t->t.name
   , u->new ArrayList<Item>(Collections.singletonList(u))
   , (a, b)->Stream.concat(a.stream(), b.stream()).collect(Collectors.toList())
   , ()->new TreeMap<String, List<Item>>()
));

カウントするなら、

Map<String, Long> countmap = list.stream().collect(
   Collectors.groupingBy(t->t.name, Collectors.mapping(u->u, Collectors.counting()))
);