Подтвердить что ты не робот

Как получить поток из поплавка []

Я учился использовать java 8 потоков, когда заметил что-то странное.

Arrays.stream() имеет методы для всех, кроме массивов с плавающей запятой:

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

Аналогично, существуют потоковые реализации для int, double и т.д., но не floats:

  • IntStream
  • LongStream
  • DoubleStream

Есть ли причина для этого?

Каков рекомендуемый способ работы с потоками с плавающей запятой?

4b9b3361

Ответ 1

от Java SE 8 for the Really Impatient от Cay S. Horstmann:

2.12. Примитивные потоки типов

... Если вы хотите сохранить short, char, byte и boolean, используйте IntStream и для float используйте DoubleStream. Дизайнеры библиотек не думал, что стоит добавить еще пять типов потоков.

Ответ 2

Здесь лучший способ, который не требует копирования данных.

DoubleStream ds = IntStream.range(0, floatArray.length)
                           .mapToDouble(i -> floatArray[i]);

Ответ 3

Я задал себе этот вопрос. Чтобы ответить на него, я начал работать над библиотекой, которая включала такие вещи, как FloatToIntFunction и ByteToCharFunction и (конечно) FloatStream, CharStream, ByteStream и т.д. Это быстро стало для меня головной болью.

Это было бы много работы со стороны разработчиков библиотеки, чтобы сделать это, потому что вам нужно будет создавать методы и интерфейсы между всеми примитивными типами данных. По мере того как вы внедряете больше типов данных, они становятся все более и более беспорядочными. Представьте, что вам нужно внедрять методы перехода от float ко всем другим примитивным типам, двойным ко всем другим примитивным типам, char ко всем другим примитивным типам и т.д.

Долгосрочное решение для Java - это добавить типы значений, чтобы вы могли делать такие вещи, как Stream<int> и Stream<float>, а не использовать типы обёртки (Stream<Integer> и Stream<float>)

Взгляните на Project Vahalla на обновления этой функции, которые могут быть добавлены в Java в будущем. http://openjdk.java.net/projects/valhalla/