繁体   English   中英

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

[英]Convert List of ArrayList of Objects into Object [][]

有谁知道如何转换二维列表:

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

放入数组: Object [][] data; 我注意到data.asList( new Object[i][j] ); 只返回1维,如T[] 当然,j维始终是恒定的。

您可以使用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);

据我所知,您必须像这样遍历列表中的所有数组:

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

使用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. 流-执行类似迭代器的操作并遍历所有元素(所有列表)
  2. map-将元素(列表)传输到所需的内容(Array [])。 虽然可以流式传输List,但您可以执行相同的操作,但是可以使用Arrays
  3. toArray-您传输流并将其完成。

这是带有一些示例数据的整个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][]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM