您的位置:首页 > 编程语言 > Java开发

java8函数式编程常用收集器<二>

2017-11-17 00:00 253 查看
摘要: java8函数式变成之收集器

继续看看《java8函数式编程》,来看看这个java.util.stream.Collectors类提供了那些静态的收集器(一种通用的,从流中生成复杂值的结构,只要将她传给collect方法,所有的流就可以使用它了),提供的方法也是挺多的(下面的例子都是临摹书中的现成例子,脑袋不想动了)。



装换成其他集合:前面介绍了collect(toList()),在流中生成列表,但是人们还是希望从流中生成其他值,比如Map或Set,或者你希望定制一个类将你想要的类抽象出来。调用toList或者toSet方法时,不需要指定具体的类型,Stream类库在背后自动为你挑选了合适的类型。你如果使用一个特定的集合收集类,可以指定该集合的类型,使用toCollection来创建集合。





装换成值:以利用收集器让流生成一个值。maxBy和 minBy允许用户按某种特定的顺序生成一个值。定义了一个比较器,并将比较器传入 maxBy 收集器,用来找出最大的,minBy也是类似的。还有averagingInt,averagingDouble,averagingLong,summingInt等方法。



下面是Collectors中maxBy的实现,由BinaryOperator接口定的方法实现。



数据分块:收集器 partitioningBy,它接受一个流,并将其分成两部分(如图 高级集合类和收集器 ,它使用 Predicate 对象判断一个元素应该属于哪个部分,并根据布尔值返回一 个Map到列表。



数据分组:数据分组是一种更自然的分割数据操作,与将数据分成 ture 和 false 两部分不同,可以使 用任意值对数据分组,很像sql中的group by操作吧。



字符串:使用 Collectors.joining 收集流中的值,该方法 可以方便地从一个流得到一个字符串,允许用户提供分隔符(用以分隔元素)、前缀和后缀。



还有收集器是可以组合使用的,下面是计算专辑中每个艺术家的作品数,具体的每个方法的使用,还是看官方的文档吧:



还有上面使用的Artlist::getName,其实就是artList->artlist.getName(),叫做方法引用。

周五要对自己好一点,看今天的比赛录像去,看看凯尔特人的面具侠!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java