如何将3维ArrayList
转换为3维数组?我正在阅读关于将2-D ArrayList
变成2-D阵列的this帖子,我想知道如何将答案扩展到3-D。
答案 0 :(得分:5)
这是新功能界面的奇妙之处:
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<>
”对象中。
我们只需要做正确的次数。
答案 1 :(得分:1)
这是基于您所引用的原始帖子的答案。我只是把它扩展到三个维度:
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;
}
}
答案 2 :(得分:0)
如果你的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 =&gt;的尺寸。 Ñ
对于尺寸2,适当的长度是所有B =>的最大长度。最大值(M)
对于尺寸3,适当的长度是所有C =>的最大长度。 max(x,y,z)
然后你可以通过循环遍历ArrayList来填充你的数组。
除非您使用Java8,否则可能有更多奇特的方法。