Kotlin:编写类似Java的大型lambda?

Kotlin:编写类似Java的大型lambda?,kotlin,Kotlin,在Java中,可以执行-> someList.stream().map(x -> { y = doSomeOperation(x); z = doSomeOtherOperation(y); return z; }).collect(Collectors.toList()); 我需要将上述代码转换为Kotlin。但是在所有的在线教程中,我了解到只有简单的lambda才有可能,比如x->x*x或x->doSomethingThenReturnValuex 在kotl

在Java中,可以执行->

someList.stream().map(x -> {
    y = doSomeOperation(x);
    z = doSomeOtherOperation(y);
    return z;
}).collect(Collectors.toList());
我需要将上述代码转换为Kotlin。但是在所有的在线教程中,我了解到只有简单的lambda才有可能,比如x->x*x或x->doSomethingThenReturnValuex

在kotlin中不可能编写一个复杂的lambda来执行上述复杂的内联操作吗?我试着写->

someList.map{ x -> {
    y = doSomeOperation(x);
    z = doSomeOtherOperation(y);
    return z;
}}

但它抛出了错误。你能告诉我正确的方法是什么吗?

你写的括号太多了。在kotlin中,lambda的参数定义设置在括号内,请参见

编辑:另外,lambdas中的return语句并不总是被允许的,当它被允许时,它的行为实际上是特定的。更多信息。 因此,您的示例需要重写如下:

someList.map { x -> 
    val y = doSomeOperation(x)
    val z = doSomeOtherOperation(y)
    // z implicitely returned as lambda result
    z
}

你写的括号太多了。在kotlin中,lambda的参数定义设置在括号内,请参见

编辑:另外,lambdas中的return语句并不总是被允许的,当它被允许时,它的行为实际上是特定的。更多信息。 因此,您的示例需要重写如下:

someList.map { x -> 
    val y = doSomeOperation(x)
    val z = doSomeOtherOperation(y)
    // z implicitely returned as lambda result
    z
}

我认为这里的问题是返回z。当放在lambda中时,它从封闭函数返回,不像在Java中它只从lambda本身返回。所以你也应该写

someList.map{x-> y=剂量操作X z=剂量其他操作Y Z } 或

someList.map{x-> y=剂量操作X z=剂量其他操作Y return@mapZ }
有关退货问题的更多详细信息,请参见此处-

我认为这里的问题是退货z。当放在lambda中时,它从封闭函数返回,不像在Java中它只从lambda本身返回。所以你也应该写

someList.map{x-> y=剂量操作X z=剂量其他操作Y Z } 或

someList.map{x-> y=剂量操作X z=剂量其他操作Y return@mapZ }
有关退货问题的更多详细信息,请参见此处-

,但它引发了错误。确切的错误是什么?我不想猜测,但这会带来错误。确切的错误是什么?我不想猜测:这里需要返回语句吗?我的意思是在正常的lambda表达式中,我们不写return,对吗?你是对的,return也是错误的,你不应该使用它。Kotlin将自动返回最后一个语句的变量,并且不允许返回,在特定情况下会返回,但行为有点特殊。这里需要返回语句吗?我的意思是在正常的lambda表达式中,我们不写return,对吗?你是对的,return也是错误的,你不应该使用它。Kotlin将自动返回最后一条语句的变量,并且不允许返回,在特定情况下会返回,但行为有点特殊。