Java 如何从float[]获取流

Java 如何从float[]获取流,java,java-8,java-stream,Java,Java 8,Java Stream,我正在学习如何使用Java8流,突然发现了一些奇怪的东西 Arrays.stream()具有除浮点数组以外的所有方法: Arrays.stream(int[]):IntStream Arrays.stream(long[]):LongStream Arrays.stream(double[]):DoubleStream 类似地,也有int、double等的流实现,但不是float: IntStream LongStream DoubleStream 这有什么原因吗 使用浮点流的推荐方法是

我正在学习如何使用Java8流,突然发现了一些奇怪的东西

Arrays.stream()
具有除浮点数组以外的所有方法:

  • Arrays.stream(int[]):IntStream
  • Arrays.stream(long[]):LongStream
  • Arrays.stream(double[]):DoubleStream
类似地,也有int、double等的流实现,但不是float:

  • IntStream
  • LongStream
  • DoubleStream
这有什么原因吗


使用浮点流的推荐方法是什么?

摘自Cay S.Horstmann的《Java SE 8,为真正不耐烦的人提供》:

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到所有其他基本类型、double到所有其他基本类型、char到所有其他基本类型的方法,等等

这方面的长期解决方案是让Java添加值类型,这样您就可以像
Stream
Stream
这样做,而不是使用包装器类型(
Stream
Stream

查看一下ProjectVahalla,了解将来可能添加到Java中的此功能的更新。

我的印象是,它们只支持最常见的原始类型,但我不确定。也许你可以看看源代码,然后想出一个FloatStream和一个stream(float[]):FloatStream方法如果要存储short、char、byte和boolean,请使用IntStream,对于float,请使用DoubleStream。库设计者认为不值得再添加五种流类型。“@marcin_j你的评论值得回答。发布它,我会接受它。可能是因为根本没有真正好的理由使用
float
做任何事情。正是我所寻找的,它使用IntStream:)从短数组转换为IntStream
IntStream is=IntStream.range(0,shortValues.length).map(I->shortValues[I])迄今为止我见过的最优雅的解决方案。。。我要加上:`return ds.toArray()``但是toArray()方法不会返回双数组而不是浮点数组吗?这种情况有助于遍历浮点数组,但如果您需要一个浮点数组作为流输出,则没有多大帮助。tbh,我宁愿使用流,也不愿使用intStream,每次我想用它做任何事情时,都必须将int转换为char。