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