【问题标题】:Convert List<List<String>> to String[][] [closed]将 List<List<String>> 转换为 String[][] [关闭]
【发布时间】:2021-05-18 20:42:12
【问题描述】:

如何将List&lt;List&lt;String&gt;&gt; 转换为String[][]

我尝试过here 提供的解决方案,但运气不佳。

任何帮助将不胜感激。

【问题讨论】:

  • 很高兴编辑,但不知道除了我最初的失败尝试之外我还能添加什么。同样,为什么下面链接中的问题是一个非常相似的问题(就结构而言)stackoverflow.com/questions/4042434/…
  • 之所以仍然开放是因为它是第一个关于这个的问题,常见问题。单独看到,它也被问得很糟糕(没有细节,没有尝试,......)。常见问题的第一个问题通常会被接受(特别是如果有很好的答案),以丰富 SO 问答库。
  • 也就是说,我猜投票和关闭的主要原因是因为您没有展示您的尝试,也没有解释他们到底有什么问题或您不清楚。您确实展示了一项研究尝试,但您没有解释为什么它没有解决您的问题。
  • 好的,这很公平,我会记住这一点 - 无论如何感谢您的回答
  • 欢迎您。我认为这个问题很有潜力,它绝对是一个经常搜索的话题。如果您 edit 它并提供所有细节,使其成为一个质量卓越的问题,我相信人们会很乐意重新打开它并放弃投票。

标签: java arrays list type-conversion nested-lists


【解决方案1】:

说明

你不能只申请outer.toArray(...),因为这会给你一个列表数组List&lt;String&gt;[]

您必须先转换所有内部列表,然后才能将它们收集到生成的数据结构中。没有可用的实用方法可以自动为您执行此操作,但您自己执行此操作相当容易。

流 API

流是一个非常好的候选者。只需流式传输外部列表,转换内部列表,然后使用Stream 提供的toArray

String[][] result = outer.stream()              // Stream<List<String>>
    .map(inner -> inner.toArray(String[]::new)) // Stream<String[]>
    .toArray(String[][]::new);

传统循环

您也可以使用更传统的手动方法遵循完全相同的想法,在该方法中设置目标外部数组,遍历内部列表,转换它们并将它们收集到您的数组中。

String[][] result = new String[outer.size()];
int i = 0;
for (List<String> inner : outer) {
    result[i] = inner.toArray(String[]::new);
    i++;
}

【讨论】:

  • 您的答案在代码中看起来不错,但是声明“您必须先转换内部列表,然后再转换外部” 可能会误导经验不足的用户。在这两种情况下,您的外部循环首先迭代外部集合,然后为每个外部集合成员迭代内部集合s
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2021-01-13
  • 1970-01-01
  • 2021-02-28
相关资源
最近更新 更多