【问题标题】:How to Convert/add String Array[] elements into List<String> [] Array如何将 String Array[] 元素转换/添加到 List<String> [] Array
【发布时间】:2020-12-07 09:52:51
【问题描述】:

我有三个字符串数组

String array1 [] = {"A", "B", "C"};
String array2 [] = {"D", "E"};
String array3 [] = {"F", "G", "H", "I"};

我想将所有这些数组存储到字符串数组列表中。

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]);

【问题讨论】:

  • 你认为List&lt;String&gt; allArrays[] =null; 会做什么?
  • List&lt;String&gt; allArrays[] =null; 您认为allArraysnull 有何不同?
  • 数组和泛型类型不能很好地工作。经验法则是优先使用 List 而不是数组,因此如果您想创建类似 List&lt;Foo&gt;[] 的内容,请改用 List&lt;List&lt;Foo&gt;&gt;

标签: java arrays string list


【解决方案1】:

您没有正确创建和添加到列表中。由于您需要List&lt;String&gt; 中的array,您可以这样做:

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&lt;List&lt;String&gt;&gt;:

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]]

【讨论】:

  • 如果您真的需要将内部列表作为数组列表,使用List&lt;String&gt; list = new ArrayList&lt;&gt;(Arrays.asList(array1)); 会更整洁。
【解决方案2】:

当然你会得到一个空指针异常,因为你需要创建一个新的列表。如果您将 List 设置为 null,则不会创建一个空 List,您只是有一个 Object,您无法对其进行任何操作。

    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 不是唯一在您的代码中不起作用的。

【讨论】:

  • 列表数组不是数组列表
  • 是的,我知道,但我没有像 LinkedList 那样经常使用它,但它们的工作方式相同,所以我向他展示了我的方式
  • 没有。我的意思是List&lt;String&gt;[]List&lt;String[]&gt; 不同,OP 要求第一个
  • “我想将所有这些数组存储到字符串数组列表中”这就是他想要的,我想我也可以向他展示另一种方式,这非常相似并且效果很好。如果回答这个问题的方式有误,我很抱歉。
【解决方案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]);
}

【讨论】:

  • 您应该添加一个解释,说明为什么当 OP 不起作用时它会起作用。
【解决方案4】:

试试这个。

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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2015-12-11
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多