Java collect()方法
这个方法在Stream类里定义需要结合动态规约理解三个参数解析<R> R collect(Supplier<R> supplier,BiConsumer<R,? super T> accumulator,BiConsumer<R,R> combiner)supplier:生成用来保存结果的容器accumulator:处理输入数据,数据会经过它的处理后
·
这个方法在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)));
更多推荐
已为社区贡献1条内容
所有评论(0)