1,collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式(称为收集器)
2,预定义收集器(collectors)包括将流元素归约和汇总到一个值.
3,预定义收集器(collectors)可以用groupby对流中元素进行分组或者用partitioningby进行分区
4,收集器可以高效的复合起来,进行多级分组,多级分区和归约 如下:
工厂方法 |
返回类型 |
用于 |
tolist |
list<t> |
把流中所有元素收集到list中 |
示例:list<menu> menus=menu.getmenus.stream().collect(collectors.tolist()) |
||
toset |
set<t> |
把流中所有元素收集到set中,删除重复项 |
示例:set<menu> menus=menu.getmenus.stream().collect(collectors.toset()) |
||
tocollection |
collection<t> |
把流中所有元素收集到给定的供应源创建的集合中 |
示例:arraylist<menu> menus=menu.getmenus.stream().collect(collectors.tocollection(arraylist::new)) |
||
counting |
long |
计算流中元素个数 |
示例:long count=menu.getmenus.stream().collect(counting); |
||
summingint |
integer |
对流中元素的一个整数属性求和 |
示例:integer count=menu.getmenus.stream().collect(summingint(menu::getcalories)) |
||
averagingint |
double |
计算流中元素integer属性的平均值 |
示例:double averaging=menu.getmenus.stream().collect(averagingint(menu::getcalories)) |
||
joining |
string |
连接流中每个元素的tostring方法生成的字符串 |
示例:string name=menu.getmenus.stream().map(menu::getname).collect(joining(“, ”)) |
||
maxby |
optional<t> |
一个包裹了流中按照给定比较器选出的最大元素的optional |
示例:optional<menu> fattest=menu.getmenus.stream().collect(maxby(menu::getcalories)) |
||
minby |
optional<t> |
一个包裹了流中按照给定比较器选出的最大元素的optional |
示例: optional<menu> lessest=menu.getmenus.stream().collect(minby(menu::getcalories)) |
||
reducing |
归约操作产生的类型 |
从一个作为累加器的初始值开始,利用binaryoperator与流中的元素逐个结合,从而将流归约为单个值 |
示例:int count=menu.getmenus.stream().collect(reducing(0,menu::getcalories,integer::sum)); |
||
collectingandthen |
转换函数返回的类型 |
包裹另一个转换器,对其结果应用转换函数 |
示例:int count=menu.getmenus.stream().collect(collectingandthen(tolist(),list::size)) |
||
groupingby |
map<k,list<t>> |
根据流中元素的某个值对流中的元素进行分组,并将属性值做为结果map的键 |
示例:map<type,list<menu>> menutype=menu.getmenus.stream().collect(groupingby(menu::gettype)) |
||
partitioningby |
map<boolean,list<t>> |
根据流中每个元素应用谓语的结果来对项目进行分区 |
示例:map<boolean,list<menu>> menutype=menu.getmenus.stream().collect(partitioningby(menu::istype)); |