java8的使用愈来愈广泛,因此要多学习学习使用,为了更好的了解Stream api,因此来写一下经常使用的Stream操做是很是有必要的,目前看的这本书是《java 8 函数式编程》由于比较薄,因此我喜欢哈哈,下面抄袭的书中的例子来看看。java
Stream的of方法使用一组初始值生成新的stream,collect(toList())方法由Stream里的值生成一个列表,是一个及早求值操做(固然不少Stream的操做是惰性求值:像filter那样只是刻画了出了Stream,但没有产生新的集合,就叫作惰性求值法,而像count这样最终会从Stream产生值的方法叫及早求值),大神说能够把Stream想象成汉堡,将最前和最后的方法想象成两片面包,这两片面包帮助咱们认清楚操做的起点和终点。编程
可使用map函数操做,将一个流中值转换成一个新的流,参数和返回值没必要属于同一种类型,可是Lambda表达式必须是Function接口的一个实例,Function接口是只包含一个参数的普通函数接口(不求甚解?)。api
能够尝试用Stream中提供的新方法filter,来遍历数据并检查其中的元素。该模式的核心思想是保留Stream中的一些元素,而过滤掉其余。和map很像,filter接受一个函数做为参数。函数式编程
flatMap能够将多个Stream链接成一个Stream,和map很像,都是Function借口,只是方法的返回值限定为Stream类型罢了。函数
max和min操做能够解决求最大值和最小值的问题,首先要考虑的是用什么做为排序的指标,这里给她传了一个Comparator对象,java8提供了一个新的静态方法comparing,使用它即可以实现一个比较器,咱们须要比较两个对象的某项值,想在是要传递一个方法就能够了。此外使用max方法还能够返回空Stream的Optional对象,经过调用get方法能够取出optional对象中的值。学习
reduce操做能够实现从一组值中生成一个值,在上述的例子中用到了count,min和max由于经常使用而归入标准库中,事实上,这些方法都是reduce操做。对象
Stream接口的方法如此之多,真是让人难以选择,感受让人闯入迷宫通常!排序
看着书中这道题,我以为挺难的,要不你来试试? 接口
只用 reduce 和 Lambda 表达式写出实现 Stream 上的 map 操做的代码,若是不想返回 Stream,能够返回一个 List(书中给出的答案最后)get