Java8之数值流

在Java8之规约那篇文章中我们用到了数值的计算:Integer sum = numbers.stream().reduce(0, (a, b) -> a + b);,这段代码的问题是,它有一个暗含的装箱成本。每个Integer都必须拆箱成一个原始类型,在进行求和。所以Stream API提供了原始类型流特化,专门支持处理数值流的方法。

  • 映射到数值流:将流转换为特化版本的常用方法有mapToInt(操作int)、mapToDouble(操作double)、mapToLong(操作long)
        //求和
        log.debug("求和 {}",peoples.stream().mapToInt(People::getAge).sum());
        //最大值,没有数据时可通过max.orElse(0)给定默认值
        OptionalInt max = peoples.stream().mapToInt(People::getAge).max();
        log.debug("最大值 {}",max.getAsInt());
        //最小值,与最大值操作一致
        log.debug("最小值 {}",peoples.stream().mapToInt(People::getAge).min().getAsInt());
        //平均值
        log.debug("平均值 {}",peoples.stream().mapToInt(People::getAge).average().getAsDouble());
  • 转换回对象流
		Stream<Integer> stream = peoples.stream().mapToInt(People::getAge).boxed();
  • 数值范围:IntStream和LongStream有静态方法range(int startInclusive, int endInclusive)和rangeClosed(int startInclusive,int endInclusive),接收开始和结束值两个参数,区别在于range方法不包括结束值,而rangeClosed包括结束值
		//输出1到10所有整数
		IntStream.range(1, 11).boxed().forEach(integer -> log.debug(String.valueOf(integer)));
		//输出1到10所有整数
		IntStream.rangeClosed(1, 10).boxed().forEach(integer -> log.debug(String.valueOf(integer)));

更多文章:
CSDN博客
简书博客
公众号:代码小搬运
代码小搬运.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值