Java 将嵌套列表转换为二维数组

Java 将嵌套列表转换为二维数组,java,multidimensional-array,nested-lists,Java,Multidimensional Array,Nested Lists,我正在尝试将嵌套列表转换为二维数组 List<List<String>> list = new ArrayList<>(); list.add(Arrays.asList("a", "b", "c")); list.add(Arrays.asList("dd")); list.add(Arrays.asList("eee", "fff")); 有没有办法奏效?请注意,直到运行时我才知道列表的大小,它可能是参差不齐的。没有简单的内置方法来做您想要做的事情,因

我正在尝试将嵌套列表转换为二维数组

List<List<String>> list = new ArrayList<>();

list.add(Arrays.asList("a", "b", "c"));
list.add(Arrays.asList("dd"));
list.add(Arrays.asList("eee", "fff"));

有没有办法奏效?请注意,直到运行时我才知道列表的大小,它可能是参差不齐的。

没有简单的内置方法来做您想要做的事情,因为您的
list.toArray()
只能返回列表中存储的元素数组,在您的情况下,这些元素也是列表

最简单的解决方案是创建二维数组,并用每个嵌套列表的
toArray
结果填充该数组

String[][] array = new String[list.size()][];

int i = 0;
for (List<String> nestedList : list) {
    array[i++] = nestedList.toArray(new String[nestedList.size()]);
}
String[][]数组=新字符串[list.size()][];
int i=0;
对于(列表嵌套列表:列表){
数组[i++]=nestedList.toArray(新字符串[nestedList.size()]);
}
(如果将Java 8与流一起使用,则可以缩短此代码,如下所示)

您可以这样做:

String[][] array = list.stream()
    .map(l -> l.stream().toArray(String[]::new))
    .toArray(String[][]::new);

它从列表列表中创建一个
,然后从中使用字符串数组替换每个列表,从而生成
,最后调用(使用生成器函数,而不是无参数版本)以生成
字符串[][]

这是将2d列表转换为2d数组的最佳且最有效的方法

List<List<Integer>>  list2d = new ArrayList<>();
Integer[][] array2d;

array2d = list2d.stream().map(x->x.toArray(new Integer[x.size()])).toArray(Integer[][]::new);
List list2d=new ArrayList();
整数[][]数组2d;
array2d=list2d.stream().map(x->x.toArray(新整数[x.size()])).toArray(整数[]]::新);

for循环有两个嵌套的
for
循环,您还没有尝试手动执行吗?像“double[][]”这样的基本类型如何?@fuat
list.stream().map(l->l.stream().mapToDouble(double::doubleValue).toArray()).toArray(double[][]::new)
如果列表是
列表。如果任何一个double为null,它将抛出NullPointerException。我使用这个
.stream().map(p->newdouble[]{p.get(0),p.get(1)})。toArray(double[][]::new)
,但您的解决方案看起来更好。谢谢
List<List<Integer>>  list2d = new ArrayList<>();
Integer[][] array2d;

array2d = list2d.stream().map(x->x.toArray(new Integer[x.size()])).toArray(Integer[][]::new);