Это просто. Для потока вы ввели число, которое является целым числом. Таким образом, он показывает ошибку, когда вы пытаетесь получить его как двойной.
Однако во втором примере вы указали в качестве входного значения double, поэтому вывод возможен без каких-либо ошибок.
См. Объяснение одного массива и потока ниже в битовой сложной структуре (двумерный массив)
double[][] doubleArray = Arrays.stream(intArray)
.map(arr -> Stream.of(arr).mapToDouble(Number::doubleValue).toArray())
.toArray(double[][]::new);
Это можно разложить следующим образом:
Сначала вы используете Arrays.stream
для создать Stream<Number[]>
. Затем для каждого Number[]
вы создаете Stream<Number>
и используете mapToDouble
, чтобы получить DoubleStream
, а затем toArray()
, чтобы получить массив double[]
.
Последний вызов toArray
преобразует этот Stream<double[]>
в массив double[][]
.
Теперь для вашего кода.
DoubleStream stream1 = Stream.of(4, 0.1).mapToDouble(num -> (doub b le)num);
stream1.forEach(System.out::println);
Ответ с мобильного телефона. Извините за неструктурированный ответ, но я думаю, что это помогает.