【问题标题】:Arraylist in koitlin from groovy来自groovy的kotlin中的Arraylist
【发布时间】:2020-05-20 20:10:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: kotlin gradle gradlew gradle-kotlin-dsl


    【解决方案1】:

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

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

    请注意,生成的 List 是不可变的(即您不能添加/删除值),因此不是 ArrayList 的实例。如果您需要一个可变列表(即,如果您希望能够添加/删除项目),那么您可以使用:

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

    同样,这不一定会返回 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) -&gt; "$key=$value" } 实际含义的信息:

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

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2021-12-20
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      相关资源
      最近更新 更多