| |||||||
---|---|---|---|---|---|---|---|
功能 |
方法 |
方法名 |
类型 |
返回类型 |
使用的类型/函数式接口 |
函数描述符 |
释义 |
筛选、切片 |
filter |
用谓词筛选 |
中间 |
Stream<T> |
Predicate<T> |
T → boolean |
接受一个谓词(一个返回boolean值的函数) |
distinct |
筛选各异元素 |
中间(有状态-无界) |
Stream<T> |
|
|
返回一个元素各异的流(根据流所生成元素的hashCode和equals方法实现) | |
limit |
截断流 |
中间(有状态-有界) |
Stream<T> |
long |
|
返回一个不超过给定长度的流,所需的长度作为参数传递给limit 1、如果流是有序的,则最多返回前n个元素 2、如果流是无序的,比如源是set,则limit的结果不会以任何顺序排列 | |
skip |
跳过元素 |
中间(有状态-有界) |
Stream<T> |
long |
|
返回一个扔掉前n个元素的流,如果流中的元素不足n个,则返回一个空流 limit(n)和skip(n)是互补的 | |
映射 |
map |
对流中的每一个元素应用函数 |
中间 |
Stream<R> |
Function<T,R> |
T→ R |
map函数接受一个函数作为参数,这个函数会应用到每一个元素上,并将其映射成一个新元素 |
flatMap |
流扁平化 |
中间 |
Stream<R> |
Function<T, Stream<R>> |
T → Stream<R> |
将数组流合并成一个流,即扁平化 如: List<String> words = Lists.newArrayList("hello", "world"); | |
查找、匹配 (终端操作、短路操作) |
allMatch |
是否匹配所有 |
终端 |
boolean |
Predicate<T> |
T → boolean |
返回boolean |
anyMatch |
是否至少匹配一个元素 |
终端 |
boolean |
Predicate<T> |
T → boolean |
可以处理“流中是否有一个元素能匹配给定的谓词” boolean | |
noneMatch |
与allMatch相对 |
终端 |
boolean |
Predicate<T> |
T → boolean |
boolean | |
findFirst |
查找第一个 |
终端 |
Optional<T> |
|
|
返回流中的第一个元素,返回一个Optional,在并行上限制多,如果不关心返回的元素是哪个,可以使用findAny,findAny在并行上限制较少 | |
findAny |
匹配任意一个 |
终端 |
Optional<T> |
|
|
返回当前流中的任意一个元素,返回一个Optional isPresent():Optional包含值的时候返回true,不包含则返回false ifPresent(Consumer<T> block):值存在的时候执行给定的代码块。Consumer函数式接口:接受一个T类型参数,并返回一个void的lambda表达式 T get():值存在时返回,不存在则抛出NoSuchElement异常 T orElse(T orther):值存在返回值,否则返回一个默认值 | |
规约 |
reduce |
规约 |
终端(有状态-有界) |
Optional<T> |
BinaryOperator<T> |
(T,T) → T |
将流中所有元素返回结合起来,得到一个值,即折叠 接受两个参数 1、一个初始值 2、一个BinaryOperation,将两个元素结合起来产生一个新值
重载:无初始值
可以和map一起组成map-reduce模式
实例:流中元素的个数 1、menu.stream.map(d - > 1).reduce(0, Integer::sum); 2、menu.stream.count(); |
排序 |
sorted |
|
中间(有状态-无界) |
Stream<T> |
Comparator<T> |
(T,T) → int |
|
循环 |
forEach |
|
终端 |
void |
Consumer<T> |
T → void |
|
收集器 |
collect |
|
终端 |
R |
Collector<T,A,R> |
|
|
计数 |
count |
|
终端 |
long |
|
|
|