一. streamAPI的简介
流(stream)是数据渠道, 用于操作数据源(集合,数组等)所生产的元素序列.
集合存储数据
流(stream)操作数据(数据计算)
注意:
- 流(stream)本身不会存储数据
- 流(stream)不会改变源对象, 但会返回一个新的流(stream)
- 流(stream)的操作是延迟的, 这意味着这些计算是需要结果的时候才会执行
二. streamAPI的使用
流程图:
- 创建流(stream)
一个数据源(如, 集合, 数组), 获取一个stream
// 方法1: 通过collection系列集合提供的stream()或者parallelStream()创建流(stream)
List<Integer> list = new ArrayList<>();
Stream<Integer> stream = list.stream();
// 方法2: 通过Arrays中的静态方法stream()创建流
String[] arr = new String[]{"abc", "bbb", "ccc", "ddd"};
Stream<String> stream = Arrays.stream(arr);
// 方法3: 通过Stream中的静态方法of()创建流
Stream<String> stream = Stream.of("abc", "abc", "bbb", "ccc", "ddd");
// 方法4: 创建无限流
// 迭代
Stream<Integer> stream = Stream.iterate(0, (x) -> x + 1);
// 生成
Stream<Double> stream = Stream.generate(Math::random);
- 中间操作
一个中间链操作, 对数据源的数据进行操作
- 筛选与切片
- 映射
- 排序
- 终止操作
一个终端操作, 执行中间链操作, 并产生结果
- 查找与匹配
- 归约
- 收集
三. stream的练习
- 随机生成10个100以内随机整数放进集合list中
List<Integer> list = Stream.generate(() -> (int) (Math.random() * 100)).limit(10).collect(Collectors.toList());
// 打印
list.forEach(System.out::println);
- 求出需求1的集合list中10个整数的平方和
int num = list.stream().map((i) -> i * i).reduce(Integer::sum).get();