重构lambda表达式(since 1.1)
你可以在lambda参数中使用重构声明语法。如果一个lambda表达式有一个Pair类型(或者Map.Entry,或者其他含有componentN函数的类型),你可以引进一些新的参数来代替括号中的参数:
map.mapValues { entry -> "${entry.value}!" }
map.mapValues { (key, value) -> "$value!" }
请注意区别声明两个参数和声明一个重构声明的区别。
{ a -> ... } // one parameter
{ a, b -> ... } // two parameters
{ (a, b) -> ... } // a destructured pair
{ (a, b), c -> ... } // a destructured pair and another parameter
如果一个重构参数组件不被使用,你可以使用下划线代替它从而避免创建它的名字。
map.mapValues { (_, value) -> "$value!" }
你可以指定整个重构参数的类型或单独的声明一个组件的类型。
map.mapValues { (_, value): Map.Entry<Int, String> -> "$value!" }
map.mapValues { (_, value: String) -> "$value!" }