如何从float []获取流

时间:2014-04-16 10:00:51

标签: java java-8 java-stream

当我注意到一些奇怪的东西时,我正在学习如何使用java 8流。

Arrays.stream()除浮点数组外都有方法:

  • Arrays.stream(int[]) : IntStream
  • Arrays.stream(long[]) : LongStream
  • Arrays.stream(double[]) : DoubleStream

同样,有int,double等的Stream实现,但不是浮点数:

  • IntStream
  • LongStream
  • DoubleStream

有原因吗?

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

3 个答案:

答案 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/