Java8 -- 07 -- IntStream类常用方法解析

原文链接:Java8 – 07 – IntStream类常用方法解析


相关文章:


在了解完流的常用方法后,我们接着来了解下数值流的常用方法

在 Java8 中,引入了三个数值流 (原始类型流特化),分别是:IntStream、LongStream、DoubleStream,它们会将流中的元素分别特化为 int、long、double,从而避免了暗含的装箱成本

  • 映射到数值流

    • mapToInt()

      • 将对象流映射为 int 数值流
    • mapToDouble()

      • 将对象流映射为 double 数值流
    • mapToLong()

      • 将对象流映射为 long 数值流
  • 转换回对象流

    • boxed()

      • 将原始流转换为一般流

一、IntStream

  • asDoubleStream()

    • 将 int 数值流转换为 double 数值流

      DoubleStream doubleStream = IntStream.rangeClosed(1, 5).asDoubleStream();
      // [1.0, 2.0, 3.0, 4.0, 5.0]
      System.out.println(doubleStream.boxed().collect(toList()));
      
  • asLongStream()

    • 将 int 数值流转换为 long 数值流

      LongStream longStream = IntStream.rangeClosed(1, 5).asLongStream();
      // [1, 2, 3, 4, 5]
      System.out.println(longStream.boxed().collect(toList()));
      
  • average()

    • 计算平均值

      OptionalDouble average = IntStream.rangeClosed(1, 5).average();
      System.out.println(average.getAsDouble()); // 3.0
      
  • boxed()

    • 将原始流转换为一般流

      Stream<Integer> boxed = IntStream.rangeClosed(1, 5).boxed();
      // [1, 2, 3, 4, 5]
      System.out.println(boxed.collect(toList()));
      
  • max()

    • 筛选最大值

      OptionalInt max = IntStream.rangeClosed(1, 5).max();
      System.out.println(max.getAsInt()); // 5
      
  • min()

    • 筛选最小值

      OptionalInt min = IntStream.rangeClosed(1, 5).min();
      System.out.println(max.getAsInt()); // 1
      
  • sum()

    • 计算总和

      int sum = IntStream.rangeClosed(1, 5).sum();
      System.out.println(sum); // 15
      
  • summaryStatistics()

    • 收集统计值:数量、总和、最大值、最小值、平均值

      IntSummaryStatistics intSummaryStatistics = IntStream.rangeClosed(1, 5).summaryStatistics();
      // IntSummaryStatistics{count=5, sum=15, min=1, average=3.000000, max=5}
      System.out.println(intSummaryStatistics);
      
  • range()

    • 生成指定范围内的数值流,不包括结束值

      IntStream.range(1, 5).forEach(System.out::print); // 1234
      
  • rangeClosed()

    • 生成指定范围内的数值流,包括结束值

      IntStream.rangeClosed(1, 5).forEach(System.out::print); // 12345
      
  • mapToObj()

    • 将 int 数值流转换为一般流 (可以转换为其他类型)

      List<String> mapToObj = IntStream.rangeClosed(1, 5)
          .mapToObj(i -> "java " + i).collect(toList());
      // [Java 1, Java 2, Java 3, Java 4, Java 5]
      System.out.println(mapToObj);
      
  • 剩余方法与 Stream 类中的方法用法相似,这里就不再赘述了


二、LongStream

  • LongStream 用法与 IntStream 用法类似

三、DoubleStream

  • DoubleStream 没有 range()rangeClosed() 两个方法,不过可以使用其自带的 generate() 方法或者由 IntStream、LongStream 的 asDoubleStream() 方法转换得到

  • generate()

    • 返回一个无限 double 数值流,接收一个供给函数作为参数,来提供新值,需要截断

      // 0.1319310689804356
      // 0.7952486378454415
      // 0.5488155029510984
      // 0.6967469672576381
      // 0.1200152480660096
      DoubleStream.generate(Math::random).limit(5).forEach(System.out::println);
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值