Java 8 流的中间操作与终端操作

说明

内容来自《Java 8 In Action》一书


中间操作和终端操作

操 作 
类 型  
返回类型
使用的类型/函数式接口
函数描述符
filter
中间
Stream<T>
Predicate<T>
T -> boolean
distinct
中间
Stream<T>


skip
中间
Stream<T>
long

limit
中间
Stream<T>
long

map
中间
Stream<R>
Function<T, R>
T -> R
flatMap
中间
Stream<R>
Function<T, Stream<R>>
T -> Stream<R>
sorted
中间
Stream<T>
Comparator<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
终端
RCollector<T, A, R>

reduce
终端
Optional<T>
BinaryOperator<T>
 (T, T) -> T
count
终端
long



查找和匹配

1.查找

anyMatch方法检查谓词是否至少匹配一个元素。anyMatch方法返回一个boolean,因此是一个终端操作。

allMatch方法检查谓词是否匹配所有元素。

noneMatch和allMatch相对它可以确保流中没有任何元素与给定的谓词匹配。


2.匹配

findAny方法查找流中任一元素,返回Optional<T>,代表一个值存在或不存在。

findFirst查找第一个元素。

区别:

findFirst在并行上限制更多。如果你不关心返回的元素是哪个,请使用findAny,因为它在使用并行流时限制较少。


注意

请记住,和迭代器类似,流只能遍历一次。


 

展开阅读全文