一,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等特定方法创建