JAVA8之Stream总结(给自己)

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

    原文作者:踏实_进取
    原文地址: https://blog.csdn.net/zhang89xiao/article/details/51916405
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞