将对象的ArrayList列表转换为Object [] []

时间:2014-04-27 14:03:16

标签: java arrays arraylist

有人知道如何转换2维列表:

private List<ArrayList<Object>> data = new ArrayList<ArrayList<Object>>();

进入数组:Object [][] data;? 我注意到data.asList(new Object[i][j]);只返回像T[]这样的1维。当然,j维度总是不变的。

3 个答案:

答案 0 :(得分:4)

您可以使用for循环并为每个内部列表调用toArray()

Object[][] arr = new Object[data.size()][];
int i = 0;
for(ArrayList<Object> list : data){
    arr[i++] = list.toArray();
}

使用,您可以将每个内部列表映射到数组,然后构造结果数组:

Object[][] arr = data.stream().map(List::toArray).toArray(Object[][]::new);

答案 1 :(得分:0)

据我所知,你必须循环遍历列表中的所有数组:

Object[][] objs = new Object[data.size()][];
for(int i= 0; i < data.size(); i++)
    objs[i] = data.get(i).toArray();

答案 2 :(得分:0)

如何使用Java8的流?

    data.stream()
            .map(il -> il.stream().toArray(size -> new Integer[size]))
// OR THIS  .map(il -> il.toArray(new Integer[0]))
            .toArray(size -> new Integer[size][]);
  1. stream - 执行类似迭代器的操作并浏览所有元素(所有列表)
  2. map - 将元素(List)转换为你想要的(Array [])。虽然List可以流式传输,但您可以使用Arrays
  3. toArray - 您转移流并完成它。
  4. 这是包含一些示例数据的整个Main方法

    public static void main(String[] args) {
        List<List<Integer>> data = new ArrayList<>();
        data.add(Arrays.asList(10, 11, 12, 13));
        data.add(Arrays.asList(20, 21, 22, 23));
        Integer[][] result = data.stream()
                .map(il -> il.toArray(new Integer[0]))
                .toArray(size -> new Integer[size][]);
    }