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

在Kotlin我可以说

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

但我不能说

 //sour val properties = System.getProperties() val list = properties.map((key,value) -> "$key = $value") 

什么是在Scala中相当于properties.map{case (key, value) => s"$key = $value"}的Kotlin?

在Kotlin 1.0中,你可以说:

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

如果你喜欢把地图条目解开来分开值,你可以这样说:

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

在Kotlin 1.1中,“现在可以使用解构声明语法解开传递给lambda的参数”( Kotlin 1.1 – Kotlin编程语言新增内容 ):

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

你的问题与推论毫无关系。

在scala你doc:

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

至于你的意见。

从斯卡拉多年开始,到现在探索科特林,我倾向于更喜欢科特林的力量和简单性,然而,如果我仍然处于学习模式,能够更好地推断事情会更好。

代码中的问题与类型推断无关。 连语法都没错。

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

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

有一个计划的Kotlin功能,但不会在1.0中使用,这将允许编写{(key,value) – >“$ key = $ value”}来解压缩一个类型的值类型 – cypressious

感谢@cypressious,这正是我所希望的。 基本上,答案是科特林还在不断发展,人们还在不断磨砺着很酷的东西。

现在我已经发现了

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

相当接近。