首页 > 解决方案 > 2D ArrayList 用法

问题描述

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

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

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

["HTML","C#"]

在一维 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);

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

标签: javaarraylist

解决方案


你可以用它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将其添加到一维数组中以打印值。arraylistfor each and then print values using . for the next 2D we can literally useinside another

最终的输出将是这样的。

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

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

推荐阅读