概述
Java8 API 中添加了一个新的抽象成为流 Stream, 可以以一种声明的方式处理数据.
Stream 与 java.io 包中的 InputStream 和 OutputStream 是完全不同的概念. Java8 中的 Stream 是对集合对象功能的增强, 专注与对集合对象进行各种非常便利, 高效的聚合操作, 或大批量数据操作.
Stream 就像一个高级版本的迭代器, 用户只要给出需要对其包含的元素是执行什么操作, Stream 会在内部隐式进行遍历, 做出相应的数据转换.
Stream 和迭代器又有不同, Stream 可以并行操作, 即将数据分为多段, 其中每一个都在不同的线程中处理, 然后将结果一起输出.
先看下面一个例子:
通过这个例子, 可以看出引入流的操作后代码的简洁.
使用
使用 Stream 的步骤如下:
创建 Stream
通过一个或多个中间操作将流转换成另一个流
通过中止操作获取结果.
1. 创建 Stream
集合类 Collection:
stream(): 创建串行流
parallelStream(): 创建并行流
数组:
Arrays.stream(arr): 通过静态方法获取数组的串行流
Arrays.stream(arr, int, int): 返回数组的串行流, 指定数组范围
数字类:
IntStream: 整型的流接口, 有如下静态方法:
empty(): 获取一个空的串行流
generate(IntSupplier): 返回指定接口产生的数字无限流
of(int,int...): 返回指定数字的串行流
of(int): 返回包含指定数字的串行流
range(start, end): 返回从 start 到 end 的整数流, 前闭后开
rangeClosed(start, end): 返回从 start 到 end 的整数流, 前闭后闭
DoubleStream: 小数的流接口, 有如下静态方法:
of(double,double...): 返回指定数字的串行流
of(double): 返回包含指定数字的串行流
generate(IntSupplier): 返回指定接口产生的数字无限流
LongStream: 长整形的流接口, 有如下静态方法:
generate(IntSupplier): 返回指定接口产生的数字无限流
of(long,long...): 返回指定数字的串行流
of(long): 返回包含指定数字的串行流
range(start, end): 返回从 start 到 end 的整数流, 前闭后开
rangeClosed(start, end): 返回从 start 到 end 的整数流, 前闭后闭
Random: 随机数, 有如下方法生成流 (不是静态方法)
doubles(): 返回无限的随机数流, 值在 0-1 之间
double(long): 返回给定数量的随机数流, 值在 0-1 之间
doubles(start, end): 返回无限的随机数流, 值在 start-end 之间
doubles(long, start, end): 返回给定数量的随机数流, 值在 start-end 之间
ints(), longs() 与 doubles 函数相同
等等操作, 请自行尝试
2. 流操作
Stream: 流的接口, 其中定义了如下对流中间操作的方法:
distinct(): 对流中元素去重, 通过 equals 函数
filter(function): 对流中元素进行过滤, 去除经过方法返回 false 的元素
limit(long): 截取流的前 long 个元素
skip(long): 丢弃流中的前 long 个元素
map(function): 将流中的每个元素经过方法进行计算
mapToDouble(function): 将流中每个元素经过方法转换成 Double
mapToInt(function): 将流中每个元素经过方法转换成 Int
mapToLong(function): 将流中每个元素经过方法转换成 Long
sorted(): 对流中元素根据自然顺序进行排序
sorted(function): 根据方法的比较结果对流中元素进行排序
当然还有其它操作
3. 获取结果操作
Stream: 流的接口, 其中定义了如下对流结果操作的方法:
forEach(function): 对流中元素进行遍历
allMatch(function): 判断流中是否所有元素经过函数均为 true
anyMatch(function): 判断流中是否存在经过函数返回 true 的原上诉
noneMatch(function): 判断流中是否所以有元素经过函数均为 false
count(): 统计流中元素的个数
max(function): 经过指定函数进行比较, 返回最大值
min(function): 经过指定函数进行比较, 返回最小值
toArray(): 将流转换成数组
当然还有其他操作, 更多操作, 请自行尝试
来源: http://www.bubuko.com/infodetail-2912580.html