zoukankan      html  css  js  c++  java
  • Stream的创建

    Stream概念

    是数据的渠道,用于操作数据源(集合、数组等)所生成的元素序列,Stream有一个计算的过程

    特点

    Stream自己不会存储元素 Stream不会改变源对象,相反,他们会返回一个持有结果的新Stream Stream操作是延迟执行的,这意味着他们会等到需要结果的时候才执行

    Stream的获取

    Collection存在两种获取流的方式
    获取顺序流
     List<String> list = new ArrayList<>();
    Stream<String> stream = list.stream();
    获取一个并行流
    Stream<String> parallelStream = list.parallelStream();
    数组存在一种获取流的方式
    Integer[] nums = new Integer[10];
    Stream<Integer> stream1 = Arrays.stream(nums);
    Stream中的静态方法创建流
     Stream<Integer> stream2 = Stream.of(1,2,3,4,5,6);
    创建无限流
    迭代:参数0是起始位置,第二个参数是迭代的,每次加2
      Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2).limit(10);
    stream3.forEach(System.out::println);
    生成:生成随机数
    Stream<Double> stream4 = Stream.generate(Math::random).limit(2);
    stream4.forEach(System.out::println);

    中间操作

    筛选

    惰性求值
    添加数据
      List<Employee> emps = Arrays.asList(
              new Employee(102, "李四", 59, 6666.66),
              new Employee(101, "张三", 18, 9999.99),
              new Employee(103, "王五", 28, 3333.33),
              new Employee(104, "赵六", 8, 7777.77),
              new Employee(104, "赵六", 8, 7777.77),
              new Employee(104, "赵六", 8, 7777.77),
              new Employee(105, "田七", 38, 5555.55)
      );
    过滤并输出过滤后的数据
       public void test2(){  
          Stream<Employee> stream = emps.stream()
                  .filter((e) -> {
                      System.out.println("测试中间操作");
                      return e.getAge() <= 35;
                  });
          stream.forEach(System.out::println);
      }

    只有当终止操作时(forEach),所有的中间操作会一次性的全部执行,称为“惰性求值” ,如果将打印语句去掉,中间操作是不会执行的

    过滤后输出的结果是年龄小于等于35的员工的信息

    截断流

        @Test
      public void test4(){
          emps.stream()
                  .filter((e) -> {
                      return e.getSalary() >= 5000;
                  }).limit(3)
                  .forEach(System.out::println);
      }

    只要是找到了三个元素以后就不再进行迭代了,可以提高效率

    跳过元素

      @Test
      public void test5(){
          emps.parallelStream()
                  .filter((e) -> e.getSalary() >= 5000)
                  .skip(2)
                  .forEach(System.out::println);
      }

    返回一个去除掉前n个元素的流,若元素的个数不足n个,则返回一个空流。

    筛选元素

       @Test
      public void test6(){
          emps.stream()
                  .distinct()
                  .forEach(System.out::println);
      }

    去除重复元素,要保证实体类重写了equals和HashCode方法

    映射

    Map
      <R> Stream<R> map(Function<? super T, ? extends R> mapper);
      @Test
      public void test(){
          List<String> list=Arrays.asList("as","zhai","hh","hub");
          list.stream()
                  .map((str)->str.toUpperCase())
                  .forEach(System.out::println);
      }

    map—接收Lambda,将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

    AS
    ZHAI
    HH
    HUB

    FlatMap

    如果Map调用的方法的返回值还是一个流,那么该Map是一个包含多个流的Map。如果用FlatMap的话,所有的流都会被拆分为元素放入到Map中,只有一个流。

     

     

     

     

     

    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    Session问题-一个部门A登录后未注销另一个部门B再登录,以B的身份操作A的成员
    Windows Server2008安装mysql5.6出现程序无法正常启动(0xc000007b)
    百度定位SDK
    Dubbo项目一段时间后提供者消失
    百度安卓SDK秘钥Key错误
    XGBoost类库使用小结
    支持向量机原理(五)线性支持回归
    主成分分析(PCA)原理总结
    scikit-learn 和pandas 基于windows单机机器学习环境的搭建
    梯度提升树(GBDT)原理小结
  • 原文地址:https://www.cnblogs.com/zhai1997/p/14499178.html
Copyright © 2011-2022 走看看