Stream
简介
当我们在对数组
、collection
等集合中的元素进行操作的时候一般会使用迭代的方式去逐个处理,为了简化代码,加快开发速度,Java 在 JDK8 版本添加Stream
流操作,用来以“做什么而非怎么做”的方式处理集合。
例如,现在有一个需求:
从给定句子中返回单词长度大于 5 的单词列表,并按长度倒序排列,最多返回 3 个
在 JDK7 及以前的版本,我们可以通过以下方式进行实现:
1 | public static List<String> sortGetTop3LongWords(String sentence) { |
在 JDK8 及以后的版本,我们可以借助 Stream 流,写出更加优雅的代码:
1 | public static List<String> sortGetTop3LongWordsByStream(String sentence) { |
简直是太优雅力 😎
Stream 流操作
概括的讲,Stream 流操作可以分为 3 种类型:
- Stream 的创建操作
- Stream 的中间操作
- Stream 的终止操作
创建操作
数据来源 | 方法名 | 说明 |
---|---|---|
单列集合 | default Stream |
Collection 中的默认方法 |
单列集合 | default Stream |
返回一个可以并行执行的 Stream 流对象 |
双列集合 | 无 | 无法直接创建 Stream 流,可以通过 keySet,entrySet 等方法间接创建 |
数组 | static |
Arrays 中的静态方法 |
零散数据 | static |
Stream 中的静态方法 |
中间操作
方法名 | 含义 |
---|---|
Stream |
用于通过设置条件过滤出元素 |
Stream |
保留前 n 个元素 |
Stream |
去除前 n 个元素 |
Stream |
对流进行排序 |
Stream |
元素去重(依赖 hashCode 和 equals 方法) |
static |
合并两个流 |
转换流中的元素类型 |
终止操作
方法名 | 含义 |
---|---|
void forEach(Consumer<? super T> action) | 遍历 |
long count() | 统计 |
Object[] toArray() | 将流中的元素转换为 Object 类型数组 |
A[] toArray(IntFunction<A[]> generator) | 将流中的元素转换为指定类型的数组 |
<R, A> R collect(Collector<? super T, A, R> collector) | 将流中的元素转换为指定类型的数组 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AnA.!
评论