来自 groovy 的 kotlin 中的数组列表

Arraylist in koitlin from groovy

我正在尝试从 gradle groovy 迁移到 kotlin,并希望将以下代码转换为 kotlin 中的 ArrayList。

jmUserProperties = new ArrayList();
project.properties.each{ k, v -> jmUserProperties << "${k}=" + "${v}" }

关于如何将上述逻辑转换为 kotlin 的任何参考。

这实际上取决于 properties 的类型,但鉴于您上面的代码,我认为我们可以假设它是 Map。如果是这种情况,那么您可以使用以下代码将 Map 实例的每个键值对映射(即转换)为其他内容的 List(在本例中为字符串列表):

val jmUserProperties = properties.map { (key, value) -> "$key=$value" }

注意结果 List 是不可变的(即你不能 add/remove 值)因此不是 ArrayList 的实例。如果您需要一个可变列表(即,如果您希望能够 add/remove 项),那么您可以使用:

val jmUserProperties = properties.map { (key, value) -> "$key=$value" }.toMutableList()

同样,这不一定 return 和 ArrayList(在实践中确实如此,但这是一个可以随时更改的实现细节)。

如果您想确保取回 ArrayList,您可以使用:

val jmUserProperties = ArrayList(properties.map { (key, value) -> "$key=$value" })

完整示例:

// create a starting Map
val properties = mapOf(
        "key1" to "value1",
        "key2" to "value2",
        "key3" to "value3"
)

// transform the map into an ArrayList<String>
val jmUserProperties = ArrayList(properties.map { (key, value) -> "$key=$value" })

// do something with the resulting ArrayList
println(jmUserProperties)

// confirm it's an ArrayList by printing its type to stdout
println(jmUserProperties::class.java)

打印:

[key1=value1, key2=value2, key3=value3]
class java.util.ArrayList

有关 properties.map { (key, value) -> "$key=$value" } 实际含义的更多信息:

  • map 是一个可以(通常)在集合上调用的函数,它允许将 Collection<A> 转换为 List<B> 并采用映射函数来转换 [= 类型的对象26=] 转换为 B 类型的对象(很像 Groovy 中的 collect)。如果您知道 Groovy.
  • ,lambda 的语法应该看起来很熟悉
  • (key, value) 是一个 destructuring declaration 并且基本上在这种情况下用于从类型为 Map.Entry 的对象中提取键和值(这就是 Map s 包含在 Java 中)。我之前链接的文档中有更多信息