将数组列表转换为数组数组
Posted
技术标签:
【中文标题】将数组列表转换为数组数组【英文标题】:Convert a list of array into an array of array 【发布时间】:2011-08-13 19:14:25 【问题描述】:我有一个这样的列表:
List<MyObject[]> list= new LinkedList<MyObject[]>();
在这样的对象上:
MyObject[][] myMatrix;
如何将“列表”分配给“myMatrix”?
我不想遍历列表并逐个元素地将其分配给 MyMatrix,但如果可能的话,我想直接分配它(通过 oppurtune 修改)。 谢谢
【问题讨论】:
***.com...fill-a-array-with-list-data 几乎是重复的 【参考方案1】:你可以使用toArray(T[])
。
import java.util.*;
public class Test
public static void main(String[] a)
List<String[]> list=new ArrayList<String[]>();
String[][] matrix=new String[list.size()][];
matrix=list.toArray(matrix);
Javadoc
【讨论】:
无法编译:“不兼容的类型;找到:array MyObject[],需要:array MyObject[][]” 实际上,尝试使用 0 x 0 矩阵,它仍然可以工作 ;) 你不需要知道矩阵的大小:例如看我的代码here 我尝试了这个解决方案,即使对矩阵的大小进行了一些修改,但它没有编译:( 感谢您的解决方案,但它没有编译。最后我用一个循环解决了。【参考方案2】:下面的sn-p给出了一个解决方案:
// create a linked list
List<String[]> arrays = new LinkedList<String[]>();
// add some trivial test data (note: arrays with different lengths)
arrays.add(new String[]"a", "b", "c");
arrays.add(new String[]"d", "e", "f", "g");
// convert the datastructure to a 2D array
String[][] matrix = arrays.toArray(new String[0][]);
// test output of the 2D array
for (String[] s:matrix)
System.out.println(Arrays.toString(s));
Try it on ideone
【讨论】:
更清晰的解决方案示例【参考方案3】:假设我们有一个“int”数组列表。
List<int[]> list = new ArrayList();
现在要将其转换为 'int' 类型的二维数组,我们使用 'toArray()' 方法。
int result[][] = list.toArray(new int[list.size()][]);
我们可以进一步概括它-
List<T[]> list = new ArrayList();
T result[][] = list.toArray(new T[list.size()][]);
这里,T是数组的类型。
【讨论】:
【参考方案4】:使用LinkedList的toArray()或toArray(T[])方法。
【讨论】:
使用 toArray() 编辑器说“不兼容的类型;找到:数组 java.lang.Object[],需要:数组 Item[][]”。我试图转换 toArray() 的结果,但它给了我一个 ClassCastException 你试过 toArray(T []) 了吗? @Gressie:+1,好建议。通过这个@Fili 或许可以做到。【参考方案5】:你可以这样做:
public static void main(String[] args)
List<Item[]> itemLists = new ArrayList<Item[]>();
itemLists.add(new Item[] new Item("foo"), new Item("bar"));
itemLists.add(new Item[] new Item("f"), new Item("o"), new Item("o"));
Item[][] itemMatrix = itemLists.toArray(new Item[0][0]);
for (int i = 0; i < itemMatrix.length; i++)
System.out.println(Arrays.toString(itemMatrix[i]));
输出是
[Item [name=foo], Item [name=bar]]
[Item [name=f], Item [name=o], Item [name=o]]
假设Item如下:
public class Item
private String name;
public Item(String name)
super();
this.name = name;
@Override
public String toString()
return "Item [name=" + name + "]";
【讨论】:
【参考方案6】:使用将列表转换为数组。 List.Array()
然后使用System.arraycopy
复制到二维数组对我来说效果很好
Object[][] destination = new Object[source.size()][];
System.arraycopy(source, 0, destination, 0, source.size());
【讨论】:
以上是关于将数组列表转换为数组数组的主要内容,如果未能解决你的问题,请参考以下文章