将数组列表转换为数组数组

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());

【讨论】:

以上是关于将数组列表转换为数组数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组列表转换为多维数组

将对象数组列表转换为字符串数组

将字典中的数组转换为数组列表

将 char 2d 数组转换为 2d char 数组列表时出现问题

将整数列表转换为整数数组[重复]

将每行从整数列表转换为整数数组?