一、什么是Stream
关于Java8 Stream的描述正确的是 (A)
A. Stream跟迭代器类似,再次遍历需要重新生成
B. Stream执行方式跟之前代码处理方式类似,中间操作立即执行
C. 对Stream修改体现到数据源上
D. Stream数据源只能是数组、容器或I/O
解析:
Stream的特点:
-
无存储,Stream不是一种数据结构,也不保存数据,数据源可以是数组、容器、I/O或Channel等;
-
为函数式编程而生,对Stream的任何修改都不会修改数据源;
-
惰性执行,Stream上的中间操作并不会立即执行,只有等到用户真正需要结果时才会执行;
-
一次消费,Stream只能被消费一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
二、Stream操作分类
Stream操作分类
中间操作(Intermediate operations) 无状态 unordered()、filter()、map()、mapToInt()、mapToLong()
mapToDouble()、flatMap()、flatMapToInt()、flatMapToLong()
flatMapToDouble()、peek()
有状态 distinct()、sorted()、limit()、skip()
终端操作(Terminal operations) 非短路操作 forEach()、forEachOrdered()、toArray()、reduce()、collect
max()、min()、count()
短路操作 anyMatch()、allMatch()、noneMatch()、findFirst()、findAny()