概述
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来对 Java 集合运算和表达的高阶抽象。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
创建
集合自带 Stream 流方法
1 | List<String> list = new ArrayList<>(); |
通过 Array 数组创建
1 | int[] array = {1,2,3,4,5}; |
使用 Stream 的静态方法创建
1 | Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5); |
数值流
1 | // 生成有限的常量流 |
另外还有 LongStream、DoubleStream 都有这几个方法。
使用
初始化一些数据,示例中使用。
1 | public class Demo { |
遍历 forEach
1 | // 循环输出user对象 |
查找 find
1 | // 取出第一个对象 |
匹配 match
1 | // 判断是否存在name是Tom的用户 |
筛选 filter
1 | // 筛选name是Tom的用户 |
映射 map/flatMap
1 | // 打印users里的name |
归约 reduce
1 | // 求用户年龄之和 |
排序 sorted
1 | // 按年龄倒序排 |
收集 collect
1 | // list转换成map |
List 转换成 Map 时遇到重复主键
这样转换会报错,因为 ID 重复。可以这样做: