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[][]”这样的基本类型如何?@fuatlist.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);