当我注意到一些奇怪的东西时,我正在学习如何使用java 8流。
Arrays.stream()
除浮点数组外都有方法:
Arrays.stream(int[]) : IntStream
Arrays.stream(long[]) : LongStream
Arrays.stream(double[]) : DoubleStream
同样,有int,double等的Stream实现,但不是浮点数:
IntStream
LongStream
DoubleStream
有原因吗?
使用浮动流的推荐方法是什么?
答案 0 :(得分:37)
这是一种更好的方法,不涉及复制数据。
DoubleStream ds = IntStream.range(0, floatArray.length)
.mapToDouble(i -> floatArray[i]);
答案 1 :(得分:24)
Java SE 8 for the Really Impatient
的来自Cay S. Horstmann的:
2.12。原始类型流
...如果要存储short,char,byte和boolean,请使用 IntStream和float,使用DoubleStream。图书馆设计师 不认为值得添加另外五种流类型。
答案 2 :(得分:1)
我问自己这个问题。为了回答这个问题,我开始研究一个包含FloatToIntFunction和ByteToCharFunction以及(当然)FloatStream,CharStream,ByteStream等内容的库。它很快就成了我的头疼。
由于您必须在所有原始数据类型之间创建方法和接口,因此库开发人员需要做很多工作。随着您实现更多数据类型,它变得越来越大。想象一下,必须实现从float到所有其他原始类型的方法,对所有其他原始类型加倍,对所有其他基本类型加char等等。
这方面的长期解决方案是让Java添加值类型,以便您可以执行Stream<int>
和Stream<float>
之类的操作,而不是使用包装类型(Stream<Integer>
和{{1} })
请查看Project Vahalla,了解此功能的更新,将来可能会添加到Java中。 http://openjdk.java.net/projects/valhalla/