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())) );