У меня есть float[], и я хотел бы получить список с теми же элементами. Я мог бы сделать некрасивую вещь, добавив их один за другим, но я хотел использовать метод Arrays.asList . Однако есть проблема. Это работает:
List<Integer> list = Arrays.asList(1,2,3,4,5);
Но это не так.
int[] ints = newint[] {1,2,3,4,5}; List<Integer> list = Arrays.asList(ints);
Метод asList принимает параметр varargs, который, насколько мне известно, является "сокращением" для массива.
Вопросы:
Почему второй фрагмент кода возвращает List<int[]> но не List<int>.
Есть ли способ это исправить?
Почему здесь не работает автофиксация; т.е. int[] В Integer[]?
Переведено автоматически
Ответ 1
В Java нет такого понятия, как List<int> - дженерики не поддерживают примитивы.
Автоматическая блокировка происходит только для одного элемента, не для массивов примитивов.
Что касается того, как это исправить - существуют различные библиотеки с множеством методов для выполнения подобных действий. Обойти это невозможно, и я не думаю, что в JDK есть что-то, что могло бы упростить задачу. Некоторые будут оборачивать примитивный массив в список типа wrapper (чтобы при доступе происходила упаковка), другие будут выполнять итерации по исходному массиву для создания независимой копии, по мере их обработки. Убедитесь, что вы знаете, какой из них вы используете.
(РЕДАКТИРОВАТЬ: я предполагал, что отправная точка для int[] не подлежит обсуждению. Если вы можете начать с Integer[], то вы далеко продвинулись :)
Эта последняя форма может быть предпочтительнее, поскольку она опускает примитивный специфический подтип Stream. Однако внутренне это все еще набор перегруженных, которые в этом случае все еще создают IntStream внутренне.