Непонятно, почему вы хотите использовать doubleToRawLongBits
. Если ваша проблема заключается в том, что умножение с 2.5
производит double
, а не long
, вам нужно, чтобы тип преобразования преобразовывал значение, так как doubleToRawLongBits
не является каноническим способом преобразования double
в long
. Вместо этого этот метод возвращает представление IEEE 754 значения, которое интересно только в особых случаях. Обратите внимание, что вы можете выполнить преобразование прямо внутри первой map
операции:
List<Long> list = new ArrayList<>();
list.add(4L);
list.add(92L);
list.add(100L);
List<Long> newList = list.stream().map(i -> (long)(i * 2.5))
.collect(Collectors.toList());
Это относится даже если вы действительно хотите представление IEEE 754 double
значений:
List<Long> newList = list.stream().map(i -> Double.doubleToRawLongBits(i * 2.5))
.collect(Collectors.toList());
Но обратите внимание, что если у вас есть временный список, тип которого соответствует типу результата, вы можете выполнить операцию на месте вместо создания двух списков (и пройти через API Stream
):
List<Long> list = new ArrayList<>();
list.add(4L);
list.add(92L);
list.add(100L);
list.replaceAll(i -> (long)(i * 2.5));
снова, то же самое относится даже если вы хотите IEEE 754 бит:
List<Long> list = new ArrayList<>();
list.add(4L);
list.add(92L);
list.add(100L);
list.replaceAll(i -> Double.doubleToRawLongBits(i * 2.5));
Если вы настаиваете на использовании Stream
API, вы можете использовать строитель, а не ArrayList
для исходных данных:
Stream.Builder<Long> b = Stream.builder();
b.add(4L);
b.add(92L);
b.add(100L);
List<Long> newList = b.build().map(i -> (long)(i * 2.5))
.collect(Collectors.toList());
newList.forEach(System.out::println);
Что именно вы думаете, что делает «Double.doubleToRawLongBits'? Я не думаю, что вы знаете, что он делает ... –
Он становится DoubleStream после умножения на 2.5. – aldrael
@aldrael: неверно. Он становится «Stream», что не то же самое. –