簡體   English   中英

Java 3d Arraylist轉換為3d陣列

[英]Java 3d Arraylist into a 3d Array

如何將3維ArrayList轉換為3維數組? 我讀這個崗位約轉動2 d ArrayList到2 d陣,我不知道如何回答延長至3 d。

使用新的功能接口,這真是太棒了:

String[][][] stringArray = mainList.stream().map(u1 -> u1.stream().map(u2 -> u2.toArray(new String[0])).toArray(String[][]::new)).toArray(String[][][]::new);

可能會工作。 遺憾的是,我目前無法訪問JRE 8進行測試,但它應該可以很好地鏈接。

只需映射額外的時間即可向外傳播陣列。

這要歸功於數組在Java中的工作方式。 一個int[][]數組實際上是一個int[]數組。 如果使用通用符號聲明數組,則這意味着具有二維的整數數組的類型將為Array<Array<Integer>> ,依此類推。 映射函數的作用只是利用這一事實,並將ArrayList<>對象映射到這些“ Array<> ”對象中。

我們只需要做正確的次數。

這是基於您引用的原始帖子的答案。 我只是將其擴展到三個維度:

public static void main (String[] args) {
  ArrayList<ArrayList<ArrayList<String>>> input;
  String[][][]                            output;
  String[][]                              tmp;
  ArrayList<ArrayList<String>>            lvl2;
  ArrayList<String>                       lvl3;

  input = new ArrayList<ArrayList<ArrayList<String>>>();
  input.add(new ArrayList<ArrayList<String>>());
  input.get(0).add(new ArrayList<String>());
  input.get(0).get(0).add("foobar");

  output = new String[input.size()][][];
  for (int outer = 0; outer < input.size(); ++outer) {
    lvl2 = input.get(outer);
    tmp  = new String[lvl2.size()][];
    for (int inner = 0; inner < lvl2.size(); ++inner) {
      lvl3       = lvl2.get(inner);
      tmp[inner] = lvl3.toArray(new String[lvl3.size()]);
    }
    output[outer] = tmp;
  }
}

如果您的arraylist類似於:A {B {C}}其中:

A1 = {
    B1={C1, C2, C3, ..., Cx}, 
    B2={C1, C2, C3, ..., Cy},
    ...
    Bm1={C1, C2, C3, ..., Cz}
A2 = {
    B1={C1, C2, C3, ..., Cx}, 
    B2={C1, C2, C3, ..., Cy},
    ...
    Bm2={C1, C2, C3, ..., Cz}
...
An = {
    B1={C1, C2, C3, ..., Cx}, 
    B2={C1, C2, C3, ..., Cy},
    ...
    Bmn={C1, C2, C3, ..., Cz}

將此arrayList轉換為3d數組,首先獲取該數組的正確長度

對於維度1,適當的長度是ArrayList A => n的大小。

對於維度2,適當的長度是所有B的最大長度=> max(m)

對於維度3,適當的長度是所有C的最大長度=> max(x,y,z)

那么您可以通過遍歷ArrayList來填充數組。

除非您使用的是Java8,否則可能會有更多奇特的方法。

暫無
暫無

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

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