创建 Stream

  1. 可以通过 Collection 系列集合提供的 stream()(串行流) 或 parallelStream()(并行流)

    1. @Test
    2. public void test(){
    3. List<String> list = new ArrayList<>();
    4. Stream<String> stream1 = list.stream();
    5. }
  2. 通过 Arrays 中的静态方法 stream() 获取数组流

    1. @Test
    2. public void test(){
    3. int[] arr = new Array[10];
    4. Arrays.stream(arr);
    5. }
  3. 通过 stream 中的静态方法 of()

    1. @Test
    2. public void test(){
    3. Stream.of();
    4. }

    中间操作

    1. 筛选与切片

    filter 接受 Lambda,从流中排除某些元素
    limit 截断流,使元素不超过给定数量
    skip(n) 跳过元素,返回一个扔掉 n 个元素的流,若流中的元素不足 n 个,则返回一个空流。与 limit(n) 互补
    distinct 筛选,通过流所生成元素的 hashCode() 和 equals() 去除重复元素

    2. 映射

    map 接收 Lambda,将元素转换成其他形式提取信息,接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素
    flatMap 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流

    3. 排序

    sorted() 自然排序
    sorted(Comparator com) 定制排序

    4. 查找与匹配

    allMatch 检查是否匹配所有元素
    anyMatch 检查是否至少匹配一个元素
    noneMatch 检查是否没有匹配所有元素
    findAny 返回第一个元素
    count 返回当前流中的总个数
    max 返回流中最大值
    min 返回流中最小值

    5. 归约

    reduce(T identity, BinaryOperator) / reduce(BinaryOperator) 可以将流中元素反复结合起来,得到一个值 ```java public void test(){ List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10); Integer sum = list.stream()

    1. .reduce(0,(x,y) -> x + y);

    System.out.println(sum); }

/ 0 是起始值,将 0 放入 x,从流中取出 1 放入 y,运算完成之后得 1,再将运算后的的值 1 放入 x,以此类推 / ```

6. 收集

collect 将流转换为其他形式,接收一个 Collector 接口的实现,用于给 Stream 中元素做汇总的方法

image.png