Есть метод, который конвертирует двумерный массив в ArrayList.
public List<Integer> toList (int[][] array) {
List list = new ArrayList();
for (int[] i : array) {
list.addAll(Arrays.asList(i));
}
return list;
}
Вызываю его.
public static void main(String[] args) {
ConvertList convertList = new ConvertList();
System.out.println("Массив: " + convertList.toList(new int[][]{{1, 2}, {3, 4}}));
}
И что получаю в итоге: Массив: [[I@1540e19d, [I@677327b6].
Объясните пожалуйста, что я делаю не так? Заранее спасибо за ответы.
Метод Arrays.asList(T... a) принимает параметр вида T... a, что означает массив объектов типа T. Ошибка в том, что вы в голове подразумеваете под типом T в данном случае тип int, но int - это примитив, и он не может быть дженериком. Поэтому в качестве T понимается объект типа int[]
В итоге в вашем list лежит 2 элемента с типом int[], выглядит это так:
1: [1,2]
2: [3,4]
Для исправления предлагаю 2 способа:
Заменить примитивный тип int на Integer
System.out.println("Массив: " + toList(new Integer[][]{{1, 2}, {3, 4}})
//........
//........
public List<Integer> toList (Integer[][] array) {
List list = new ArrayList();
for (Integer[] i : array) {
list.addAll(Arrays.asList(i));
}
return list;
}
Разворачивать внутренний массив руками
public List<Integer> toList (int[][] array) {
List list = new ArrayList();
for (int[] i : array) {
for(int j : i){
list.add(j);
}
}
return list;
}
Да, собственно, если бы вы объявили переменную List list правильно, как List<Integer> list, то ваш код даже не скомпилировался бы, в вашем же случае есть всего лишь warning, на который стоило бы обратить внимание.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости