Как преобразовать / добавить элементы строкового массива [] в список [] Массив

#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» Это то, чего он хотел, и я подумал, что могу также показать ему другой способ, который очень похож и также хорошо работает. Прошу прощения, если это был неправильный способ ответить на этот вопрос.