Java Stream
Java Stream
1、什么是Stream
Stream 是 Java8 中处理集合的关键抽象概念。
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
Stream 会将要处理的元素集合看作一种流,在流的过程中,借助 Stream API 对流中的元素进行操作,比如:筛选、排序、聚合等
简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
2、Stream 的特性:
- stream 不存储数据,二十按照特定的规则对数据进行计算,一般会输出结果
- stream 不会改变数据源,通常情况下会产生一个新的集合或一个值
- stream 具有延迟执行特性,只有调用终端操作时,中间操作才会执行
3、Stream操作分类
可以由数组或集合创建,对流的操作分为两种:
- 中间操作,每次返回一个新的流,可以有多个。(筛选 filter 、映射 map 、排序 sorted 、去重组合 skip–limit)
- 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。(遍历 foreach 、匹配 find-match 、规约 reduce 、聚合 max-min-count 、收集 collect)
Stream操作的三个步骤
1、创建 Stream:一个数据源(如:集合、数组),获取一个流
2、中间操作:一个中间操作链,对数据源的数据进行处理
3、终止操作(终端操作):一个终止操作,执行中间操作链,并产生结果
4、Stream的使用
创建Stream
用集合创建流
List<String> list = new ArrayList<>();
// 创建一个顺序流
Stream<String> stream = list.stream();
// 创建一个并行流
Stream<String> parallelStream = list.parallelStream();
顺序流和并行流区分
stream 是顺序流,由主线程按顺序对流执行操作
parallelStream 是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求
如果流中的数据量足够大,并行流可以加快处理速度。
除了直接创建并行流,也可以通过 parallel() 把顺序流转换成并行流:
Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst(); List<Integer> list = Arrays.asList(1,2,3,65,8); System.out.println(findFirst.get());
数组创建流
Integer[] nums = new Integer[10];
Stream<Integer> stream = Arrays.stream(nums);
Stream中的静态方法创建流
Stream<Integer> stream = Stream.of(1,2,3,4,5,6);//1 2 3 4 5 6
//创建无限流 ①迭代
Stream<