【问题标题】:Arraylist<Object []> to Object[][]Arraylist<Object []> 到 Object[][]
【发布时间】:2014-10-03 18:09:01
【问题描述】:

我正在尝试从 Object[][] 创建一个 Object[] 的 ArrayList,执行一些更改,然后通过所做的更改获取一个新的 Object[][]。

但是我得到这个编译错误:

错误:不兼容的类型:Object[] 无法转换为 Object[][]

执行此操作时:

protected Object[][] data;
fillData();
ArrayList dlist= new ArrayList<Object[]>( Arrays.asList(data) ); //NO COMPILE ERROR
Object[] example=new Object[2]; //just to use in toArray()

String [] args= {"new data 1","new data 2"};//yeah just a typo thanks Oscar
dlist.add( args ); //Sending String instead of Object is legal thanks Oscar.

data= dlist.toArray( example ); //COMPILER ERROR incompatible...

我使用了错误的语句,没有编译器错误: ArrayList dlist= new ArrayList&lt;Object[]&gt;( Arrays.asList(data) ); 因为输出是 Object[] 而不是 Object[][] 这是我想要的 感谢您的帮助。

【问题讨论】:

  • List&lt;Object[]&gt; dlist= new ArrayList&lt;Object[]&gt;( Arrays.asList(data) ); 为我编译。你的具体问题是什么?可能您没有添加必要的导入或其他内容。
  • dlist.add(&lt;whatever&gt;) 有效,因为您声明了原始的ArrayList dlist,类似于声明ArrayList&lt;Object&gt; dlist,这意味着您可以在那里存储任何内容。
  • 你说的我使用了错误的命令,谢谢你的帮助是什么意思?你的问题解决了吗?

标签: java arrays object arraylist


【解决方案1】:

我尝试了这段代码并且工作正常:

Object[][] data = { { "hello", "world" }, { "bye", "world" } };
//convert Object[][] to List<Object[]>
List<Object[]> dlist = new ArrayList<>(Arrays.asList(data) );
for (Object[] o : dlist) {
    System.out.println(Arrays.deepToString(o));
}
//convert List<Object[]> to Object[][]
Object[][] data2 = dlist.toArray(new Object[0][]);
System.out.println(Arrays.deepToString(data2));

此外,Java 语言不适用于命令,除非您参考命令行来编译文件,但这不属于 Java 编程语言。

【讨论】:

  • Object[][] data2 = dlist.toArray(new Object[dlist.size()][]); 也会避免产生不必要的垃圾。
  • Object[][] data = dlist.toArray(new Object[dlist.size()][]); 就够了吗?我不想保留数据“数据”。只是新的。 Luiggi Object[][] data2 = dlist.toArray(new Object[0][]); 我应该把它放在一个迭代器中并用计数器替换 0 吗?还是您的声明正在更新整个二维数组?
  • @lrn2java 我正在替换整个 Object[][] 2d 数组。
  • @msandiford 我把它留给 JVM。
  • 好的,谢谢estimado,我将继续我的小项目,然后阅读数组和列表,deepToString 似乎可以解决问题。
【解决方案2】:

这样做:

List<Object[]> dlist = new ArrayList<Object[]>();
for(Object[] i: data) {
    dlist.add(i);
}

【讨论】:

  • 这是 OP 试图避免的。
  • 看不到他在问题中的哪个位置指定他试图避免这种情况。还有,为什么?
  • 使用Arrays#asList 就足够了。
  • 看不到 ArrayList&lt;Object[]&gt; dlist = new ArrayList&lt;Object[]&gt;(Arrays.asList(objects)); 无法编译...它在我的机器上工作。
  • 这就是问题所在,这是一个不清楚的问题,我们不知道 OP 的确切问题。
猜你喜欢
  • 2014-07-31
  • 2014-05-09
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多