【问题标题】:Is there a way to conver a LinkedList<String[]> to String[][]?有没有办法将 Linked List<String[]> 转换为 String[][]?
【发布时间】:2019-08-23 10:27:07
【问题描述】:

正如标题所说,我不想将 LinkedList 转换为 String[][],但我不知道如何。

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

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

【问题讨论】:

  • 如果下面的任何答案回答了您的问题,Stack Overflow 的工作方式,您可以通过单击旁边的复选标记“接受”该答案; details here。但前提是您的问题得到解答。

标签: java arrays list


【解决方案1】:

您没有提供包含数组的大小。你要么根本不提供论据:

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

输出:

[一,乙] [c,d] [e, f] 真的

【讨论】:

  • 请注意,list.toArray(new String[0][]) 可以正常工作。零长度数组是一个很小的分配。
【解决方案2】:

您可以从LinkedList&lt;String[]&gt; 中获取Stream&lt;String[]&gt; 并使用toArray(IntFunction&lt;A[]&gt; generator) 将其转换为二维字符串数组:

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 是结果数组的长度。

【讨论】:

  • List 已经有自己的toArray 时,为什么还要在中间添加Stream
  • @T.J.Crowder 你说的是合乎逻辑的,但我展示了一种方法,我没有明确提供结果数组的大小。 :)
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
相关资源
最近更新 更多