Java collect()方法
这个方法在Stream类里定义
需要结合动态规约理解
三个参数
解析
<R> R collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator, BiConsumer<R,R> combiner)
supplier:生成用来保存结果的容器
accumulator:处理输入数据,数据会经过它的处理后保存到容器中
combiner:把产生的结果拼接到另一个容器中(用于多线程并行)
返回一个集合
List<String> asList = stringStream.collect(ArrayList::new, ArrayList::add, ArrayList::addAll); String concat = stringStream.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();
Collector
解析
<R,A> R collect(Collector<? super T,A,R> collector)
Collector把三个参数整合在了里面
例子
注意如果用Collectors.groupingBy(),返回值是Map
//拼接字符串为一个长字符串 List<String> asList = stringStream.collect(Collectors.toList()); //根据居住城市进行分类 Map<String, List<Person>> peopleByCity = personStream.collect(Collectors.groupingBy(Person::getCity)); //嵌套分类 Map<String, Map<String, List<Person>>> peopleByStateAndCity = personStream.collect(Collectors.groupingBy(Person::getState, Collectors.groupingBy(Person::getCity)));