Java 如何从float[]获取流
我正在学习如何使用Java8流,突然发现了一些奇怪的东西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 这有什么原因吗 使用浮点流的推荐方法是
Arrays.stream()
具有除浮点数组以外的所有方法:
Arrays.stream(int[]):IntStream
Arrays.stream(long[]):LongStream
Arrays.stream(double[]):DoubleStream
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:)从短数组转换为IntStreamIntStream is=IntStream.range(0,shortValues.length).map(I->shortValues[I])代码>迄今为止我见过的最优雅的解决方案。。。我要加上:`return ds.toArray()``但是toArray()方法不会返回双数组而不是浮点数组吗?这种情况有助于遍历浮点数组,但如果您需要一个浮点数组作为流输出,则没有多大帮助。tbh,我宁愿使用流,也不愿使用intStream,每次我想用它做任何事情时,都必须将int转换为char。