[英]Java 3d Arraylist into a 3d Array
使用新的功能接口,這真是太棒了:
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.