当前位置: 首页 > 知识库问答 >
问题:

kotlin:2 个 lambda 参数的语法

沈飞翼
2023-03-14

我是kotlin的新手。我有一个带有2个重载方法的java类。一个接受一个函数,另一个接受两个

mapToEntry(Function<? super T, ? extends V> valueMapper)

mapToEntry(Function<? super T, ? extends K> keyMapper, 
           Function<? super T, ? extends V> valueMapper)

现在在kotlin中,我尝试使用两个参数调用版本(如java中):

myClass.mapToEntry(r -> r, r -> r)

但我得到编译错误。

Kotlin:意外标记(使用“;”在同一行上分隔表达式)

正确的语法是什么?

共有3个答案

裘臻
2023-03-14

基本语法:Lambda 表达式始终括在大括号中:

val sum = { x: Int, y: Int -> x + y }

让我们用静态编程语言定义一个类似于您的函数:

fun <T, K> mapToEntry(f1: (T) -> K, f2: (T) -> K) {}

第一种可能是直接的,我们简单地如下传递两个lambdas:

mapToEntry<String, Int>({ it.length }, { it.length / 2 })

此外,很高兴知道,如果 lambda 是传递给函数的最后一个参数,则可以像这样解除参数:

mapToEntry<String, Int>({ it.length }) {
    it.length / 2
}

第一个lambda在Paranthes中传递,而第二个不是。

曾骁
2023-03-14

你很接近了,你只需要用卷括号把它们包起来…

myClass.mapToEntry({r -> r}, {r -> r})

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

myClass.mapToEntry( { it.reversed() }, { it.toUpperCase() })
连乐
2023-03-14

在Kotlin中,lambda表达式总是被大括号包围,因此

myClass.mapToEntry({ r -> r }, { r -> r })

请参阅:Lambda表达式语法

 类似资料:
  • 我是Kotlin的新手,很难理解下面的代码 所以这个函数叫做,它的输入参数是一个名为的函数,它是

  • 在Kotlin中设置click侦听器时,我们可以这样写: SAM转换后,我们可以写: 但我注意到kotlin也接受: 以及 我想知道这里发生了什么?我的意思是应该使用匿名类或SAM速记之类的东西来实现。这是某种中间阶段还是什么? 任何解释或链接到资源是高度赞赏的。

  • Sonarqube只允许函数的7个参数。我有一个函数,它用8个参数组成字符串。 使此函数只有7个参数。我通过删除最后一个参数<code>dat</code>来拆分函数,但为了计算<code>dat</code>变量,我还需要<code>b</code>和<code>d</code>变量值。因此,在函数返回后,我需要<code>b</code>和<code>d</code>的值来计算<code>da

  • 静态编程语言全局函数: 用java调用此函数: 它会给出以下错误:无法解析方法'show WarningDialog(com.us.stickermaker.backgroundRemover.##################################################################################################### 该

  • 我需要制作两个lambda函数,一个用参数调用另一个,被调用的函数将参数打印出来。我很难让它工作:第一个函数: 请告知我应该在被调用函数中输入什么代码才能接收参数“hello Jenny”?非常感谢。