Итак, я пытаюсь преобразовать (примитивный) массив int в список,
for(int i=0;i<limit;i++) {
arr[i]=sc.nextInt();
}
List list=Arrays.asList(arr);
System.out.print(list);
При этом печатаются такие значения, как, например, [[I@59a6e353]
. Есть возможность добавить <Integer>
перед списком переменных, но, поскольку массив является примитивным целым числом, это невозможно.
Есть ли какое-нибудь решение для этого? Добавление <int[]>
перед списком переменных не вариант, так как мне нужно вызвать ограниченный метод подстановочных знаков.
Используйте System.out.print(Arrays.toString(list))
@Stultuske печать содержимого списка дает тот же результат.
@Rakkun, в таком случае, как ты пытался распечатать контент?
@Stultuske for (Object i: list) { System.out.println (i); }
<int[]> List<int[]> java.util.Arrays.asList(int[]... a)
вы конвертируете массив в список int[]
@JhanzaibHumayun пробовал это, но ide предупреждает, что метод toString(long[]) в типе Arrays неприменим для аргументов (List), хотя для объекта[] тоже есть такой же метод.
@Rakkun это потому, что вы заставляете его использовать реализацию toString класса Object, почему вы так удивлены, что он использует реализацию toString класса Object?
@XtremeBaumer, это вариант, но мне нужно вызвать (ограниченный) метод подстановочных знаков, который я не могу вызвать, если попытаюсь добавить <int[]>
Проблема в том, что у вас есть массив примитивного типа int
. Arrays.asList()
не может преобразовать его в List<Integer>
(List<int>
недопустимо). Вам нужно либо иметь массив Integer[]
, либо использовать другой метод для преобразования int[]
в List<Integer>
@XtremeBaumer да, это решило мой вопрос.
если у вас уже есть массив int[]
: List<Integer> list = IntStream.of(array).boxed().toList()
- Кстати, рекомендуется не использовать необработанные типы! JLS 4.8: "Использование необработанных типов разрешено только в качестве уступки совместимости с устаревшим кодом. Использование необработанных типов в коде, написанном после введения обобщений в язык программирования Java, настоятельно не рекомендуется. Вполне возможно, что в будущих версиях языка программирования Java будет запрещено использование необработанных типов."
@user16320675 user16320675 да, похоже, Java действительно не одобряет использование необработанных примитивных типов в дженериках.
Сигнатура метода Arrays.asList
следующая:
public static <T> List<T> asList(T... a);
Вы можете видеть, что ему нужен массив дженериков T
на входе.
Поэтому вы можете передать массив Integer
, и это сработает. Пример:
List<Integer> list= Arrays.asList(new Integer[] {1,2,3,4});
System.out.print(list);
Выход:
[1, 2, 3, 4]
Если вы пройдете int[]
, вы можете получить только List<int[]>
, потому что int
— это примитивный тип, и его нельзя использовать в качестве универсального. Пример:
List<int[]> list= Arrays.asList(new int[] {1,2,3,4});
System.out.print(list);
Выход:
[[I@6b1274d2]
Предлагаю вам прочитать ответ в этом вопрос.
Arrays.asList(arr)
создает не List<Integer>
, а List<int[]>
с одним элементом (вашим arr
).
Вы должны объявить свою переменную как Integer[] arr
, если вам нужно использовать «Arrays.asList».
не печатать список, печатать содержимое списка. Списки не имеют реализации для toString, поэтому следует ожидать вашего результата.