zoukankan      html  css  js  c++  java
  • Java8新特性 --Stream

    一、 创建Stream

    1. 创建Stream方式一: 集合类的stream()或 parallelStream()

      List<String> list = new ArrayList<>();
      Stream<String> stream = list.stream();
      
    2. 创建Stream方式二: 通过Arrays中的静态方法stream()获取

      String[] strings = new String[10];
      Stream<String> stream1 = Arrays.stream(strings);
      
    3. 创建Stream方式三: 通过Stream 类中的静态方法of()

      Stream<String> stream2 = Stream.of("aa", "bb", "cc");
      
    4. 创建Stream方式四: 无限流
      迭代:

      Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2);
      

      生成:

      Stream.generate(() -> Math.random());
      

    二、中间操作

    • 筛选和切片  
        filter 接受Lambda, 从stream中筛选出满足条件的元素。
        limit 限定stram中元素的数量。满足了limit数量以后,stream中以后的迭代终止,类似与短路操作。
        skip(n) 跳过元素,返回一个扔掉了前n个元素的stream。若stream中元素不足n个,则返回一个空stream。与limit(n)互补
        distinct 通过stream中元素的hashCode() 和 equels() 去除重复元素

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

    • 排序
        sorted() 自然排序 按照Comparable排序
        sorted(Comparator com) 自定义排序 按照comparator排序

    • 归约
        T reduce(T identity, BinaryOperator accumulator);
        Optional reduce(BinaryOperator accumulator);
        例如: 计算list中所有元素的和
        过程 0 + 1 = 1 + 2 = 3 + .....
        List list1 = Arrays.asList(1,2,3,4,5,6);
        Integer reduce = list1.stream().reduce(0, (x, y) -> x + y);
        System.out.println(reduce); //21

    • 收集
       Optional max(Comparator<? super T> comparator);
       Collector 接口中方法的实现决定了如何对流执行收集操作(如收集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态法,可以方便地创建常见收集器实例,具体方法与实例如下表:
        
        
      PS:

    1. 内部迭代: 迭代操作由Stream API完成
    2. 外部迭代: 自己写Iteriator

    三、 并行流与串行流

    并行流 就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel() 与sequential() 在并行流与顺序流之间进行切换。

  • 相关阅读:
    Android连载7-动语添加碎片
    JavaScript连载6-转化为Number和Boolean类型、运算符
    Java连载111-timer定时器、反射机制概述
    用conda创建虚拟环境的一些常用命令
    Java内存分析
    Java语言中的Class类
    线程协作
    LeetCode刷题笔记第26题
    LeetCode刷题笔记第20题(括号匹配)
    LeetCode刷提笔记第1332题
  • 原文地址:https://www.cnblogs.com/zheting/p/7899556.html
Copyright © 2011-2022 走看看