2D ArrayList 用法

2D ArrayList Usage

我正在做一个编码问题,它使用了包含以下内容的 2D ArrayList:

[["HTML","C#"],
 ["C#","Python"],
 ["Python", "HTML"]]

我不想深入探讨问题所在,但本质上我想获取 2D ArrayList 中的元素并将它们作为单独的元素插入到 1D ArrayList 中。例如,如果我抓取:

["HTML","C#"]

在 1D ArrayList 中,“HTML”是索引 0 处的元素,“C#”是索引 1 处的元素。我尝试通过执行以下操作来做到这一点:

ArrayList<ArrayList<String>> twoD = new ArrayList<>();//2D ArrayList containing the elements above
ArrayList<String> oneD = new ArrayList<String>();
oneD.add(twoD.get(0));

那没有用,但是这样做了:

ArrayList<String> oneD = twoD.get(0);

所以我很困惑为什么第一种方法不起作用而第二种方法起作用。

你可以使用java.util.stream来实现你想要的

public static void main(String[] args) {
    // If using 2D array
    String[][] languages = {{"HTML","CSS"},{"JAVA","C++"},{"Python","ruby"}};
    List<String> languageList = new ArrayList<>();
    for(String[] s:languages) {
        for (String lang: s) {
            languageList.add(lang);
        }
    }
    System.out.println("\n==Print Values in 2D array==");
    languageList.stream().forEach(s-> System.out.println(s));

    //if using 2D arrayList
    List<List<String>> languagesArr = new ArrayList<>();
    for(String[] s:languages) {
        List<String> temp = new ArrayList<>();
        for (String lang: s) {
            temp.add(lang);
        }
        languagesArr.add(temp);
    }
    System.out.println("\n==Print Values 2D ArrayList==");
    languagesArr.stream().forEach(s-> s.stream().forEach(ss-> System.out.println(ss)));
}

正如您在第一个 languages 二维数组中看到的那样,我们使用 for each and then print values using stream. for the next 2D 将其添加到一维 arraylist arraylistwe can literally usestreaminside anotherstream` 打印值。

最后的输出结果是这样的

==Print Values in 2D array==
HTML
CSS
JAVA
C++
Python
ruby

==Print Values 2D ArrayList==
HTML
CSS
JAVA
C++
Python
ruby