#java #arrays #string #list
#java #массивы #строка #Список
Вопрос:
У меня есть три массива строк
String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};
Я хочу сохранить все эти массивы в список String array.
List<String> allArrays[]
Мой выходной список allArrays[] должен содержать
allArrays[0]= [A,B,C]
allArrays[1]= [D,E]
allArrays[2]= [F,G,H,I]
Я пробовал приведенный ниже фрагмент кода, но получаю исключение нулевого указателя
String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};
List<String> allArrays[] =null;
allArrays[0].addAll(Arrays.asList(array1));
//Null pointer exception here
allArrays[1].addAll(Arrays.asList(array2));
allArrays[2].addAll(Arrays.asList(array3));
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(b[2]);
Комментарии:
1. Как вы думаете, что
List<String> allArrays[] =null;
делает?2.
List<String> allArrays[] =null;
Чем вы ожидаетеallArrays
отличаться отnull
?3. Массивы и универсальные типы плохо работают. Эмпирическое правило заключается в том, чтобы предпочесть List массиву, поэтому, если вы хотите создать что-то подобное,
List<Foo>[]
тогда используйтеList<List<Foo>>
вместо этого.
Ответ №1:
Вы неправильно создаете и добавляете в список. Поскольку вам нужен array
of List<String>
, вы можете сделать это:
String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};
List<String>[] allArrays = new ArrayList[3];
List<String> list = new ArrayList<String>();
Collections.addAll(list, array1);
allArrays[0] = list;
list = new ArrayList<String>();
Collections.addAll(list, array2);
allArrays[1] = list;
list = new ArrayList<String>();
Collections.addAll(list, array3);
allArrays[2] = list;
System.out.println(allArrays[0]);
System.out.println(allArrays[1]);
System.out.println(allArrays[2]);
Вывод:
[A, B, C]
[D, E]
[F, G, H, I]
Лучшим способом было бы использовать List<List<String>>
:
String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};
List<List<String>> allArrays = new ArrayList<>();
allArrays.add(Arrays.asList(array1));
allArrays.add(Arrays.asList(array2));
allArrays.add(Arrays.asList(array3));
System.out.println(allArrays);
Вывод:
[[A, B, C], [D, E], [F, G, H, I]]
Комментарии:
1. Было бы удобнее использовать
List<String> list = new ArrayList<>(Arrays.asList(array1));
, если вам действительно нужно, чтобы внутренние списки были списками массивов.
Ответ №2:
Попробуйте это.
String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};
List<String>[] allArrays = new List[] {
Arrays.asList(array1),
Arrays.asList(array2),
Arrays.asList(array3)
};
System.out.println(Arrays.toString(allArrays));
вывод
[[A, B, C], [D, E], [F, G, H, I]]
Ответ №3:
Попробуйте это:
String[] array1 = {"A", "B", "C"};
String[] array2 = {"D", "E"};
String[] array3 = {"F", "G", "H", "I"};
List<String>[] listArr = new ArrayList[3];
listArr[0] = new ArrayList<>(Arrays.asList(array1));
listArr[1] = new ArrayList<>(Arrays.asList(array2));
listArr[2] = new ArrayList<>(Arrays.asList(array3));
for (int i = 0; i < 3; i ) {
System.out.println(listArr[i]);
}
Комментарии:
1. Вы должны добавить объяснение, почему это работает, когда OP этого не сделал.
Ответ №4:
Конечно, вы получаете исключение с нулевым указателем, потому что вам нужно создать новый список. Если вы присвоите своему списку значение null, вы не создадите пустой список, у вас просто будет объект, с которым вы ничего не сможете сделать.
String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};
List<String[]> allArrays;
allArrays = new LinkedList<>();
allArrays.add(array1);
allArrays.add(array1);
allArrays.add(array1);
String[] array4 = allArrays.get(0);
String[] array5 = allArrays.get(1);
String[] array6 = allArrays.get(2);
System.out.println(array4);
System.out.println(array5);
System.out.println(array6);
Это должно сработать, если вы делаете это с LinkedList. Кстати, вы используете IDE, когда я помещаю ваш код в Eclipse или любую другую IDE, я получаю много предупреждений, так что исключение NullPointerException было не единственным, что не работает в вашем коде.
Комментарии:
1. массив list не является списком array
2. да, я знаю, но я не использовал это так часто, как LinkedList, но они работают одинаково, поэтому я показал ему свой путь
3. нет. Я имею в виду, что
List<String>[]
это не то же самое, чтоList<String[]>
, и OP запрашивает первый4. «Я хочу сохранить все эти массивы в List of String array» Это то, чего он хотел, и я подумал, что могу также показать ему другой способ, который очень похож и также хорошо работает. Прошу прощения, если это был неправильный способ ответить на этот вопрос.