如何从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添加值类型,以便您可以执行诸如StreamStream而不是使用包装器类型( StreamStream

请查看Project Vahalla,了解此function的更新,将来可能会添加到Java中。 http://openjdk.java.net/projects/valhalla/