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.!
评论





