Java 3d Arraylist到3d数组

时间:2016-01-12 12:55:12

标签: java arrays arraylist

如何将3维ArrayList转换为3维数组?我正在阅读关于将2-D ArrayList变成2-D阵列的this帖子,我想知道如何将答案扩展到3-D。

3 个答案:

答案 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,否则可能有更多奇特的方法。