java8-Stream之数值流
时间:2022-05-08
本文章向大家介绍java8-Stream之数值流,主要内容包括将对象流映射为数值流、将数值流转回对象流、默认值OptinalInt、生成一个数值范围流、注、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
在Stream里元素都是对象,那么,当我们操作一个数字流的时候就不得不考虑一个问题,拆箱和装箱。虽然自动拆箱不需要我们处理,但依旧有隐含的成本在里面。Java8引入了3个原始类型特化流接口来解决这个问题:IntStream,DoubleStream,LongStream, 分别将流中的元素特化为int、long、doub,从而避免了暗含的装箱成本。每个接口都带来了进行常用数值归约的新方法,比如求和sum,求最大值max。此外还有必要时再把他们转换回对象流的方法。这些特化的原因就是装箱造成的复杂性--类似int和Integer之间的效率差异。
将对象流映射为数值流
常用方法为mapToInt
, mapToDouble
, mapToLong
,这些方法和map相同,只是它们返回一个特化流,而不是Stream。
@Test
public void testToInt() {
final ArrayList<Dish> dishes = Lists.newArrayList(
new Dish("pork", false, 800, Type.MEAT),
new Dish("beef", false, 700, Type.MEAT),
new Dish("chicken", false, 400, Type.MEAT),
new Dish("french fries", true, 530, Type.OTHER),
new Dish("rice", true, 350, Type.OTHER),
new Dish("season fruit", true, 120, Type.OTHER),
new Dish("pizza", true, 550, Type.OTHER),
new Dish("prawns", false, 300, Type.FISH),
new Dish("salmon", false, 450, Type.FISH)
);
IntStream intStream = dishes.stream()
.mapToInt(Dish::getCalories);
}
将数值流转回对象流
我们虽然会使用数值流进行计算,但经常需要回归到对象,那么就需要将int stream装箱为Integer stream. 可以使用boxed()方法。
Stream<Integer> boxed = intStream.boxed();
默认值OptinalInt
由于数值流经常会有默认值,比如默认为0。数值特化流的终端操作会返回一个OptinalXXX对象而不是数值。
OptionalInt optionalInt = dishes.stream()
.mapToInt(Dish::getCalories)
.max();
int max = optionalInt.orElse(1);
生成一个数值范围流
有时候需要生成一个数值范围,比如1到30. 可以使用for循环,也可以直接使用数值流。
创建一个包含两端的数值流,比如1到10,包含10:
IntStream intStream = IntStream.rangeClosed(1, 10);
创建一个不包含结尾的数值流,比如1到9:
IntStream range = IntStream.range(1, 9);
注
以上出自《Java8 In Action》
- 使用python中的Numpy进行t检验
- 实操 Web Cache
- 怎样制作RPM包
- 框架设计原则和规范(完)
- 这或许是对小白最友好的python入门了吧——9,数字深入体验
- WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
- 图像处理:利用神经网络生成新图像和修复旧图像
- 这或许是对小白最友好的python入门了吧——8,初识for语句
- Extjs 项目中常用的小技巧,也许你用得着(3)
- 对于Ext.data.Store 介紹 与总结,以及对以前代码的重构与优化
- 数据库与图片完美解决方案
- 数据库进程间通信解决方案
- 【实践操作】在iPhone上创建你的第一个机器学习模型
- WP8微信5.3开始内测 支持Cortana语音 两微破冰了?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 使用R语言对进行空间数据可视化
- R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
- R语言马尔可夫体制转换模型Markov regime switching
- Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
- python3用ARIMA模型进行时间序列预测
- R语言马尔可夫转换模型研究交通伤亡人数事故预测
- scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘
- 使用R语言进行Metroplis-in-Gibbs采样和MCMC运行分析
- R语言中的马尔科夫机制转换(Markov regime switching)模型
- R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
- nginx快速入门
- R语言中进行期权定价的Heston模型
- 使用R语言随机波动模型SV处理时间序列中的随机波动率
- 20个ES6面试高频问题
- i++和++i傻傻分不清楚?这里给你最清楚的解答