有没有办法将LinkedList <String []>转换为String [] []?

时间:2019-08-23 10:27:07

标签: java arrays list

正如标题所述,我希望将LinkedList转换为String [] [],我不知道如何。

LinkedList<String[]> list;
String[][] arrayStrings;

//What i tried, but doesn't work
arrayStrings = list.toArray(new String[list.size()][list.size()]);

2 个答案:

答案 0 :(得分:4)

您不提供所包含数组的大小。您要么根本不提供任何论点:

arrayStrings = list.toArray();

...或者您为数组提供了足够的空间:

arrayStrings = list.toArray(new String[list.size()][]);

外部数组中的数组将是列表中的相同数组。

示例(live copy):

LinkedList<String[]> list = new LinkedList<String[]>();
list.add(new String[] { "a", "b" });
list.add(new String[] { "c", "d" });
list.add(new String[] { "e", "f" });

String[][] arrayStrings;

arrayStrings = list.toArray(new String[list.size()][]);
for (var entry : arrayStrings) {
    System.out.println(Arrays.toString(entry));
}
System.out.println(arrayStrings[0] == list.get(0)); // true

输出:

[a, b]
[c, d]
[e, f]
true

答案 1 :(得分:1)

您可以从Stream<String[]>中获取LinkedList<String[]>,然后使用toArray(IntFunction<A[]> generator)将其转换为二维String数组:

List<String[]> list = new LinkedList<>();
list.add(new String[]{"foo", "bar"});
list.add(new String[]{"foo", "baz"});
String[][] arr = list.stream().toArray(String[][]::new);
System.out.println(Arrays.deepToString(arr));

输出:

[[foo, bar], [foo, baz]]

generator是一个函数,可产生所需类型和所提供长度的新数组。

上面的构造函数引用可以显式表示为lambda:

String[][] arr = list.stream().toArray(len -> new String[len][]);

len是结果数组的长度。