kotlin:2 lambda参数的语法

pio*_*rek 4 java syntax lambda kotlin kotlin-interop

我是kotlin的新手.我有一个带有2个重载方法的java类.一个接受一个功能,另一个接受两个功能

mapToEntry(Function<? super T, ? extends V> valueMapper)
Run Code Online (Sandbox Code Playgroud)

mapToEntry(Function<? super T, ? extends K> keyMapper, 
           Function<? super T, ? extends V> valueMapper)
Run Code Online (Sandbox Code Playgroud)

nowm in kotlin,我试图调用带有2个参数的版本(如java中所示):

myClass.mapToEntry(r -> r, r -> r)
Run Code Online (Sandbox Code Playgroud)

但我得到编译错误.

Kotlin:意外的令牌(使用';'来分隔同一行上的表达式)

什么是正确的语法?

hot*_*key 7

在Kotlin中,lambda表达式总是被花括号括起来,所以就是这样

myClass.mapToEntry({ r -> r }, { r -> r })
Run Code Online (Sandbox Code Playgroud)

请参阅:Lambda表达式语法


Tod*_*odd 5

你已经很接近了,你只需要把它们用花括号括起来......

myClass.mapToEntry({r -> r}, {r -> r})
Run Code Online (Sandbox Code Playgroud)

此外,您还可以利用 Kotlin 定义it为 lambda 的默认单个参数这一事实。假设键和值都是字符串,并且你想反转键并将值大写(只是举个例子):

myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() })
Run Code Online (Sandbox Code Playgroud)