一,Stream API 可以表达复杂的数据处理查询.常用操作如下
操作 |
类型 |
返回类型 |
函数式接口 |
函数描述符 |
filter |
中间 |
Stream<T> |
Predicate<T> |
T->Boolean |
distinct |
中间-有状态 |
Stream<T> |
|
|
Skip |
中间-有状态 |
Stream<T> |
Long |
|
Limit |
中间-有状态 |
Stream<T> |
Long |
|
Map |
中间 |
Stream<T> |
Function<T,R> |
T->R |
Flatmap |
中间 |
Stream<T> |
Function<T,Stream<R>> |
T->Stream<R> |
Sorted |
中间-有状态 |
Stream<T> |
Compartor<T> |
(T,T)->int |
anyMatch |
终端 |
Boolean |
Predicate<T> |
T->Boolean |
noneMatch |
终端 |
Boolean |
Predicate<T> |
T->Boolean |
allMatch |
终端 |
Boolean |
Predicate<T> |
T->Boolean |
findAny |
终端 |
Optional<T> |
|
|
findFirst |
终端 |
Optional<T> |
|
|
forEach |
终端 |
Void |
Consumer<T> |
T->void |
Collect |
终端 |
R |
Collector<T,A,R> |
|
Reduce |
终端-有状态 |
Optional<T> |
BinaryOperator<T> |
(T,T)->T |
Count |
终端 |
Long |
|
|
二,可以使用filter,distinct,skip和limit对流进行筛选和切片
三,可以使用map和flatMap提取或转换流中的元素
四.可以使用findFirst和findAny方法查找流中的元素.你可以用allMatch,noneMatch和anyMatch方法让流匹配给定的谓语
五,上述方法都利用了短路:找到结果就立刻停止计算,并没有必要处理整个流
六,可以利用reduce方法将流中的所有元素迭代合并成一个结果,例如求和或者查询最大的元素
七,filter和map等操作都是无状态的,他们并没有储存任何状态.reduce等操作要储存状态才能计算出一个值.sorted和distinct等操作也要储存状态,因为他们需要把流中的所有元素缓存起来才能返回一个新的流.这种操作称为有状态操作.
八.流有三种基本原始类型特化:intStream,doubleStream和LongStream.他们的操作也有相应的特化
九,流不仅可以从集合创建,也可以从值,数组,文件以及iterate与generate等特定方法创建