繁体   English   中英

如何在Java中将2Darray转换为2D ArrayList?

[英]How to convert 2Darray into 2D ArrayList in java?

我已经搜索了类似的问题,但仍然找不到适合我的案例的解决方案。 所以基本上,我有一个名为'array2D'的2D数组,我正在尝试将其转换为2D arrayList。 我试图创建一个arrayList并用于循环以复制来自array2D的每个元素,而array2D是原始的2D Array。 我想知道是否有任何干净有效的方法来做到这一点。

这是我的代码:

    List<List<String>> arrayList2D = new ArrayList<List<String>>();
    List<String> eachRecord = new ArrayList<String>();

    for (int i=0; i< array2D.length; i++){
      for(int j =0; j<array2D[1].length; j++){
        eachRecord.add(String.valueOf(array2D[j]));
      }
      arrayList2D.add(eachRecord);
      eachRecord.clear();
    }

    System.out.println(Arrays.toString(arrayList2D.toArray()));

结果返回空的arrayList,这意味着我无法转换它们。

[[], [], [], [], [], [], [], [], [], [], [], [], [], []]

我怀疑为什么我无法填充新的ArrayList的原因是由于add方法的错误使用,我也尝试了push方法,并且这是编译错误。 我想知道是否有任何干净有效的方法来做到这一点。

我建议对您的代码进行3处改进。

  1. 使用array2D[i].length代替array2D[1].length

  2. 使用eachRecord.add(String.valueOf(array2D[i][j])); 而不是eachRecord.add(String.valueOf(array2D[j]));

array2D[index]返回一个总数组。 array2D[indexRow][indexCol]返回这些索引处的对象。

  1. 代替clear(),在循环内启动eachRecord列表。

List<String> eachRecord = new ArrayList<String>(); 在第一个for循环中。

String [][]array2D = {{"A", "B"}, {"C", "D"}, {"E", "F"}};
    List<List<String>> arrayList2D = new ArrayList<List<String>>();
    for (int i = 0; i < array2D.length; i++) {
        List<String> eachRecord = new ArrayList<String>();
        for (int j = 0; j < array2D[i].length; j++) {
            eachRecord.add(String.valueOf(array2D[i][j]));
        }
        arrayList2D.add(eachRecord);
    }
    System.out.println(arrayList2D);//[[A, B], [C, D], [E, F]]

如果要添加整个数组,可以使用Arrays#asList方法。

String[][] array2D = { { "A", "B" }, { "C", "D" }, { "E", "F" } };
    List<List<String>> arrayList2D = new ArrayList<List<String>>();
    for (int i = 0; i < array2D.length; i++) {
        List<String> eachRecord = Arrays.asList(array2D[i]);
        arrayList2D.add(eachRecord);
    }
    System.out.println(arrayList2D);

结果为空的原因是, eachRecord.clear();eachRecord.clear();eachRecord.clear(); 从结果列表arrayList2D中删除引用。 一个简单的解决方案是用eachRecord = new ArrayList<String>();替换该行eachRecord = new ArrayList<String>();

还可以将j<array2D[1] j<array2D[i]更改为j<array2D[i] ,以使其正常工作。

您可以使用Arrays#asList方法转换2D数组

// Initialize the array to the correct size :)
List<List<String>> arrayList2D = new ArrayList<>(array2D.length);

for (String[] record : array2D) {
    arrayList2D.add(Arrays.asList(record));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM