【收藏】Java 8 的 Stream 玩法大全
前言
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用 Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。让程序员写出高效率、干净、简洁的代码。
什么是 Stream?
Stream(流)是一个来自数据源的元素队列并支持聚合操作,流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。Stream(流)的组成包含:元素、数据源、聚合操作、内部迭代、Pipelining 等。
元素:特定类型的对象
数据源:流的来源,元素的集合,数组等。
聚合操作:类似 SQL 语句一样的操作, 比如 filter, map, reduce, find, match, sorted 等。
内部迭代:在流中内部迭代,与 for 外部处理不同。
Pipelining: 中间操作都会返回流对象本身。
Stream 基本操作
初始化两组数据
Stream 创建
stream()
使用 stream()创建串行流。
parallelStream()
parallelStream() 方法创建并行流
Arrays.stream()
使用 Arrays 中的 stream() 方法
Stream.of
Stream.of 创建流,创建的是有限流
Stream.iterate
Stream.iterate 创建流,创建一个有序无限的数据流
Stream.generate
Stream.generate 创建流,创建一个无限数据流
reader.lines
使用 BufferedReader.lines() 方法,将每行内容转成流
Stream 操作
forEach
forEach 来迭代流中的每个数据,输出所有元素
map
map 方法用于映射每个元素到对应的结果
flatMap
flatMap:将流中的每个值都换成另一个流,然后把所有流连接成一个流。
filter
filter 方法用于通过设置的条件过滤出元素,过滤流中的某些元素
peek
如同于 map,能得到流中的每一个元素。但 map 接收的是一个 Function 表达式,有返回值;而 peek 接收的是 Consumer 表达式,没有返回值。
limit
limit(n) 方法用于获取指定数量的流。例如:limit(n):获取 n 个元素
skip
skip(n):跳过 n 元素,配合 limit(n)可实现分页
distinct
distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
sorted
sorted sorted 方法用于对流进行排序,自然排序。
sorted(Comparator com)
sorted(Comparator com):定制排序,自定义 Comparator 排序器
parallel
parallelStream 是流并行处理程序的代替方法。
Collectors
Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。
count
count 统计结果的收集器也非常有用,流的终止操作,用在流的最后。
allMatch
allMatch:接收一个函数,当流中每个元素都符合该断言时才返回 true,否则返回 false,流的终止操作,用在流的最后
noneMatch
noneMatch:接收一个函数,当流中每个元素都不符合该断言时才返回 true,否则返回 false,流的终止操作,用在流的最后。
anyMatch
anyMatch:接收一个函数,只要流中有一个元素满足该断言则返回 true,否则返回 false,流的终止操作,用在流的最后。
findFirst
findFirst:返回流中第一个元素,流的终止操作,用在流的最后。
findAny
findAny:返回流中的任意元素,流的终止操作,用在流的最后。
max
max:返回流中元素最大值,流的终止操作,用在流的最后。
min
min:返回流中元素最小值,流的终止操作,用在流的最后。
collect
collect:接收一个 Collector 实例,将流中元素收集成另外一个数据结构。
总结
Stream API 提供了一种高效且易于使用的处理数据的方式。让程序员写出高效率、干净、简洁的代码。在 Stream 流中都是使用复杂的表达式去处理数据逻辑,当然大家可以先了解这些方法,在项目中使用到的时候,再进行深入了解,进行更复杂的组合操作。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA 开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。
好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
版权声明: 本文为 InfoQ 作者【小阿杰】的原创文章。
原文链接:【http://xie.infoq.cn/article/e5e30ec95f077615465fc2b4b】。文章转载请联系作者。
评论