为什么我不能说:val list = properties.map((key,value) - >" $ key = $ value")

时间:2015-12-09 22:49:41

标签: kotlin

在Kotlin,我可以说

SELECT tableId
FROM exampleTable
WHERE tableId = 1 OR tableId = 2

但我不能说

//sweet
for ((key,value) in System.getProperties())
    println("$key = $value")

Scala中等效于//sour val properties = System.getProperties() val list = properties.map((key,value) -> "$key = $value") 的Kotlin是什么?

4 个答案:

答案 0 :(得分:7)

在Kotlin 1.0中你可以说:

TextBox

如果您希望将地图条目解压缩为单独的值,您可以说:

val properties = System.getProperties()
val list = properties.map { "${it.key} = ${it.value}" }

在Kotlin 1.1"您现在可以使用destructuring declaration语法解压缩传递给lambda的参数#34; (What's New in Kotlin 1.1 - Kotlin Programming Language):

val properties = System.getProperties()
val list = properties.map { val (key, value) = it; "$key = $value" }

答案 1 :(得分:2)

你的问题绝对没有推论。

在scala中你是doc:

import collection.JavaConversions._
val properties = System.getProperties()
val list = properties.map{case (key,value) => s"$key = $value"}

至于你的意见。

  

从Scala年代开始,到现在探索Kotlin,我倾向于更喜欢Kotlin的力量和简洁性,但是,考虑到我仍然处于学习模式,能够更好地推断出事情会更好。

代码中的问题与类型推断无关。甚至语法都没有。

答案 2 :(得分:0)

请更正lambda表达式和解包的语法:

val properties = mapOf(1 to "First", 2 to "Second")
val list = properties.map {val (value, key) = it; "$key = $value"} 

答案 3 :(得分:0)

  

有一个Kotlin功能已经计划好但在1.0中不可用,这将允许写{(键,值) - > “$ key = $ value”}解压缩类型对象 - cypressious

感谢@cypressious,这正是我所希望的。基本上答案是Kotlin仍然在不断发展,人们仍在努力抛弃酷炫的东西。

现在我找到了

//savory
val properties = System.getProperties()
val list = properties.map {property -> "${property.key} = ${property.value}"}

非常接近。