1: 方法
collectingAndThen(Collector<T, A, R> var0, Function<R, RR> var1)
2:作用
先 Collector ,再 Function
注意:Function是对 Collector操作后的整体stream做操作
3:举例
对list分组,并统计数量
@Test
public void test16() {
List<Dish> dish1List = DishList.getDish1List();
Integer collect = dish1List.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(Dish::getType), typeListMap -> typeListMap.size()));
System.out.println(collect);
}
注意:groupingBy后是一个Map,再次统计数量,统计的是Map中的元素个数,而不是 Map 中某个value对应的list的数量
4:对比不使用collectingAndThen
/**
* 根据type分组-然后统计数量
*/
@Test
public void groupingBy2() {
List<Dish> dish1List = DishList.getDish1List();
Map<Dish.Type, Long> collect = dish1List.stream().collect(Collectors.groupingBy(Dish::getType, Collectors.counting()));
}
Collectors.counting() 统计的是Map中的每个Value的数量