标签:
在这章中我们将学习Stream API,在JDK 8 中的一项新的特性。为了理解这一章的主题,你需要知道如何使用Lambda表达式和java.util.function里的预定义的函数式接口。
一个Stream 类似于一个管道,但它里面运输的不是水和石油,而是把数据从源头运输到目的地。根据传递的方式,一个stream可以是并行和并发的。并行的stream运行在多核的CPU的机器上会很有用。
乍一看,一个stream就像是一个集合容器,但是,它不是一个数据结构用来存储对象,它只是负责移动对象,所以,你不能把它想象成集合对象那样往它里面添加数据。
使用stream的主要原因是它支持并行和并发的聚合操作。例如,你可以非常容易地从stream里面过滤,排序或映射元素。
Stream API的不同的类型在java.util.stream包中。其中Stream接口是这里面最常用的stream类型。 一个Stream可以传递任何类型的对象,同时也有几个特殊化的Stream:IntStream, LongStream and DoubleStream。他们都来源于BaseStream。
下面的表格展示了一些在Stream接口中常见的方法:
方法 | 描述 |
concat | 懒加载的方式连接两个stream。返回一个新的stream,他的元素包括两个stream的所有元素。第一个stream的元素后面紧跟着第二个stram的元素。 |
count | 返回stream里面元素的个数。 |
empty | 创建并返回一个空的stream。 |
filter | 在stream所有的元素中根据给定的断言接口返回一个新的stream。 |
forEach | 给stream每个元素执行一个操作。 |
limit | 从当前的stream中根据指定最大元素的个数返回一个新的stream。 |
map | 返回包含了应用于stream的元素的给定的方法的的结果的stream。 |
max | 根据比较器返回stream中最大的元素。 |
min | 根据比较器返回stream中最小的元素。 |
of | 返回一个已经给定了值的stream。 |
reduce | 在stream上使用唯一ID和累加器执行递减操作。 |
sorted | 返回一个新的使用自然排序的stream。 |
toArray | 返回一个包含stream所有元素的数组。 |
有些stream的方法执行中间过程的操作,有的执行最终的操作。中间过程的操作会把一个stream传输到另一个stream中。像filter,Map,sorted等这些方法。
执行最终操作的方法会产生结果或是其他的影响。例如,count,forEach就是执行的最终结果的操作。
中间过程的操作属于懒加载的方式,他不会真正的执行,只有是执行最终结果的才会真正在源上开始计算。
Upgrading to Java 8——第四章 The Stream API
标签:
原文地址:http://www.cnblogs.com/IcanFixIt/p/4325165.html