1. Stream概述

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
Stream可以由数组或集合创建,对流的操作分为两种:

  1. 中间操作,每次返回一个新的流,可以有多个。
  2. 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新集合或值。

Stream有几个特性:

  1. stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
  2. stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
  3. stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

    2. Stream的创建

    1. List<String> list = Arrays.asList("a", "b", "c");
    2. // 创建一个顺序流
    3. Stream<String> stream = list.stream();
    4. // 创建一个并行流
    5. Stream<String> parallelStream = list.parallelStream();
    1. int[] array={1,3,5,6,8};
    2. IntStream stream = Arrays.stream(array);
    ```java Stream stream = Stream.of(1, 2, 3, 4, 5, 6);

Stream stream2 = Stream.iterate(0, (x) -> x + 3).limit(4); stream2.forEach(System.out::println);

Stream stream3 = Stream.generate(Math::random).limit(3); stream3.forEach(System.out::println);

  1. **streamparallelStream的简单区分: stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数,两者的处理不同之处:如果流中的数据量足够大,并行流可以加快处速度。**<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/8406104/1653725482889-fdc8295e-0d8c-4181-9e6e-f8e3d41cb2c4.png#clientId=u09826d6b-bb84-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u52cf2e55&margin=%5Bobject%20Object%5D&name=image.png&originHeight=546&originWidth=690&originalType=url&ratio=1&rotation=0&showTitle=false&size=25416&status=done&style=none&taskId=uf3bcdc5d-98e9-472f-9893-d41df5ffa02&title=)
  2. ```java
  3. Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst();

3. 使用示例

链接