Мне нужно преобразовать массив двойных значений в поток В чем разница между следующими двумя подходами? Какой из них лучше ?
double [] dArray = {1.2,2.3,3.4,4.5};
Stream<double[]> usingStream = Stream.of(dArray); //approach 1
DoubleStream usingArrays = Arrays.stream(dArray); //approach 2





Очевидно, что Stream.of(dArray) дает вам Stream<double[]>, единственным элементом которого является входной массив, что, вероятно, не то, что вам нужно. Вы могли бы использовать этот подход, если бы ваш ввод был Double[] вместо примитивного массива, поскольку тогда вы бы получили Stream<Double> элементов массива.
Поэтому Arrays.stream(dArray) - это то, что вам нужно, когда вам нужно преобразовать массив double в поток double.
Помимо того, что они разные?
DoubleStream можно рассматривать как Stream<Double> (но как примитив), а Stream<double[]> - это поток множество.
Stream.of и Arrays.stream - это совершенно разные вещи для разных целей, и поэтому их не следует сравнивать.
Stream.of при передаче одномерного массива, как в вашем примере, даст поток с единственным элементом, который является самим массивом, что в большинстве случаев не то, что вам нужно.
Arrays.stream, как следует из названия, работает на массивы, тогда как Stream.of является более общим.
Было бы лучше и интереснее, если бы вы спросили, в чем разница между DoubleStream.of(dArray) и Arrays.stream(dArray).
@RajN ну, они «одинаковы» в том смысле, что оба возвращают DoubleStream, но они разные в том смысле, что один предназначен для использования явно типизированных значений (DoubleStream.of), а другой предназначен для использования массива ( Arrays.stream). Но тогда можно сказать, что DoubleStream.of по-прежнему выдает правильное значение с учетом двойного массива. Это все из-за varargs .. но в идеале вы должен используете DoubleStream.of только тогда, когда вы хотите передать явные значения, например. DoubleStream.of (1.0,2.0,3.0), поскольку он имеет больше смысла и в этом его предполагаемая цель. Отсюда то, что делает этот вопрос более интересным.
@RajN Поскольку они одинаковы по функциональности, но предназначены для разных целей, я считаю, что это делает этот вопрос намного более интересным, ИМО.
Я думаю, что оба (DoubleStream.of (dArray) и Arrays.stream (dArray)) - это то же самое, что и возврат DoubleStream. И Arrays.stream (), имеющий несколько перегруженных методов для обработки различных типов массивов, чтобы преобразовать их в соответствующий тип потока ... например, IntStream, LongStream