这个方法在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)));
|