当前位置: 移动技术网 > IT编程>开发语言>Java > 【java新特性】之collect收集器

【java新特性】之collect收集器

2019年08月08日  | 移动技术网IT编程  | 我要评论

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.empty()

示例:optional<menu> fattest=menu.getmenus.stream().collect(maxby(menu::getcalories))

minby

optional<t>

一个包裹了流中按照给定比较器选出的最大元素的optional
如果为空返回的是optional.empty()

示例: 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));

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网