这个方法在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)));
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)