【问题标题】:Java 3d Arraylist into a 3d ArrayJava 3d Arraylist 转换为 3d 数组
【发布时间】:2016-04-17 02:31:17
【问题描述】:

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

【问题讨论】:

  • 你的意思是:int[][][] --> ArrayList<ArrayList<ArrayList<Integer>>>
  • 输入 ArrayList>> --> int[][][]

标签: java arrays arraylist


【解决方案1】:

这是新功能界面的奇妙之处:

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>> 类型,依此类推。 map 函数所做的只是利用这一事实,并将ArrayList<> 对象映射到这些“Array<>”对象中。

我们只需要做正确的次数。

【讨论】:

  • 你知道ideone吗?它为相当多的语言提供了一个编辑器、一个在线编译器和一个运行器。我可能错了,但我认为他们支持java7。
  • 我的意思是java8。是的。他们支持 sun-jdk-8u51。
  • 我刚刚测试了这个(并做了一个小的语法编辑)。像魅力一样工作。
  • @lupz 感谢您的链接,我会检查一下。
【解决方案2】:

这是基于您参考的原始帖子的答案。我只是将其扩展到三个维度:

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;
  }
}

【讨论】:

  • 老兄,非常感谢。这就是我一直在寻找的答案。
  • 我建议也看看@Erik Nyström 的答案。
【解决方案3】:

如果你的数组列表是这样的: 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,否则可能有更多奇特的方法来做到这一点。

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多