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

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

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

装换成值:以利用收集器让流生成一个值。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(),叫作方法引用。字符串

周五要对本身好一点,看今天的比赛录像去,看看凯尔特人的面具侠!get

相关文章
相关标签/搜索