在 Kotlin 中将一组数组展平为一个数组

all*_*tic 2 kotlin

我有以下Java 11代码(我的代码中arr1和的内容arr2并不那么简单,而且我有超过2个数组,但概念是相同的):

String[] arr1 = new String[] {"a","b"};
String[] arr2 = new String[] {"c", "d"};
var req = Stream.of(arr1, arr2).flatMap(Stream::of).toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

此代码的目的是获取多个字符串数组中的所有值并生成一个字符串数组。它需要是一个数组,而不是一个集合,因为我无法控制的 API 稍后会在代码中接受 String 数组。

在这个简单的示例中,生成的数组应按此顺序包含以下元素:{ "a", "b", "c", "d" }

在 Kotlin 中将 1 深数组展平为单个数组的规范方法是什么?

我在这里陷入困境的主要原因是 IntelliJ Java 到 Kotlin 转换器在转换此代码方面做得非常糟糕,导致输出 Kotlin 中出现多个奇怪的语法错误。我的其余代码不使用方法引用之类的东西,更干净地转换为 Kotlin。

gid*_*dds 6

我不知道规范,但也许最简单的等价物是:

\n
val arr1 = arrayOf("a", "b")\nval arr2 = arrayOf("c", "d")\nval req = arrayOf(arr1, arr2).flatten().toTypedArray()\n
Run Code Online (Sandbox Code Playgroud)\n

这会创建一个Array<String>包含您想要的四个值的 。

\n

这里我们不转换值,只是重新包装它们,因此flatten()比更常见的flatMap更简单。

\n

(通常最好使用列表和其他集合 \xe2\x80\x94 标准库对它们有更好的支持,并避免围绕泛型和类型擦除 \xe2\x80\x94 的问题,但必须与正如本问题中所指定的,旧的或设计不当的 API 是您可能仍然需要数组以及可变参数和低级集合实现的极端情况之一。)

\n