簡體   English   中英

以編程方式創建 2D ArrayList,然后從中創建一個 ArrayList

[英]Programmatically create 2D ArrayList and then create a single ArrayList from it

以編程方式在 java 中創建 2D ArrayList,然后從中創建單個 ArrayList。

我有一個像這樣的 5 個整數的ArrayList<Integer> IntegerArraylist {1,2,3,4,5};

基於此,我必須創建 2D ArrayList,例如:

ArrayList<ArrayList<String>> StringArraylist;

像這樣:

{{a}, {b, c, d, e, f}, {g, h}, {i, j, k}, {l}}

現在基於此,我必須將其轉換為單個 ArrayList,如下所示:

{a, b, c, d, e, f, g, h, i, j, k, l}

我們應該怎么做?

List<String> list = new ArrayList<String>();
    for (String[] array : YOUR_2D_ARRAY) {
        list.addAll(Arrays.asList(array));

我認為最簡單的方法是使用 StreamAPI

public static void main(String[] args) {
   String[][] arr = {
       {"a"},
       {"b", "c", "d", "e", "f"},
       {"g", "h"}
       // and so on
   };

   List<List<String>> stringArraylist = Arrays.stream(arr)
       .map(Arrays::asList)
       .collect(Collectors.toList());
    
   List<String> merged = stringArraylist.stream()
       .flatMap(List::stream)
       .collect(Collectors.toList());

   System.out.println(merged);
}

或者,簡單地使用 for-each 循環:

List<String> merged = new ArrayList<>();
for(List<String> list : stringArraylist) {
    merged.addAll(list);
}

請注意,您需要使用List接口而不是ArrayList實現。

您可以將streamsflatMap一起使用

 Stream<String> oneDStream = StringArraylist.stream().flatMap((Function<ArrayList<String>, Stream<String>>) strings -> strings.stream());
 List<String> oneDList = oneDStream.collect(Collectors.toList());
 oneDList.forEach(s -> {
     System.out.print(" "+ s);
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM