Вы должны передать ссылку на конструктор целочисленного массива в toArray
следующим образом.В противном случае он создаст Object[]
по умолчанию.
Arrays.stream(valStrs).map(Integer::valueOf).toArray(Integer[]::new);
mapToInt
создает IntStream
, а его функция toArray()
возвращает int[]
.Вот объявление.
int[] toArray();
И наоборот, map(Integer::valueOf)
создает Stream<Integer>
, а toArray
возвращает Object[]
, если не указано иное.Вот реализация.
@Override
public final Object[] toArray() {
return toArray(Object[]::new);
}
Вызов toArray(Integer[]::new)
вызовет этот перегруженный метод.
public final <A> A[] toArray(IntFunction<A[]> generator)
Вот выдержка из документации.
Возвращает массив, содержащий элементы этого потока, используя предоставленную функцию генератора для выделения возвращаемого массива.
генератор функция, которая создает новый массив желаемого типа и предоставленной длины