Java 在高阶函数中使用参数/s调用lambda
我是java/kotlin函数式编程的新手,并进行了一些实践。 只是想知道调用lambda时如何传递lambda的参数。例如,在这里调用someMethod,我需要传递一个Int参数Java 在高阶函数中使用参数/s调用lambda,java,android,functional-programming,kotlin,Java,Android,Functional Programming,Kotlin,我是java/kotlin函数式编程的新手,并进行了一些实践。 只是想知道调用lambda时如何传递lambda的参数。例如,在这里调用someMethod,我需要传递一个Int参数 fun lambdaTest( someMethod: (Int) -> Boolean){ someMethod() } 如何做到这一点?答案可能很简单,我只是在任何地方都找不到,在文档中只有带有列表的示例,在这种情况下,答案是明确的: fun <T, R> List<T>.
fun lambdaTest( someMethod: (Int) -> Boolean){
someMethod()
}
如何做到这一点?答案可能很简单,我只是在任何地方都找不到,在文档中只有带有列表的示例,在这种情况下,答案是明确的:
fun <T, R> List<T>.map(transform: (T) -> R): List<R> {
val result = arrayListOf<R>()
for (item in this)
result.add(transform(item))
return result
}
funlist.map(转换:(T)->R):List{
val result=arrayListOf()
对于(本文件中的项目)
结果.添加(转换(项目))
返回结果
}
这里需要传递一个函数,该函数以Int为参数并返回布尔值
lambdaTest { int ->
int > 0 // can be also changed to it
}
这里,如果Int参数大于0,则返回true
如果需要更多参数:
fun lambdaTest( someMethod: (Int, String) -> Unit){ // Unit means do not return anything
someMethod(1, "Kotlin")
}
并称之为:
lambdaTest { int, string ->
println("Passed Int: $int, and String: $string as parameter")
// Output = Passed Int: 1, and String: Kotlin as parameter
}
将(Int)->Boolean
视为等同于以下接口(事实上,这实际上是在JVM上编译的):
现在,我们将此方法称为:
// We can pass an anonymous class as the parameter
lambdaTest(object : Function<Int, Boolean>() {
override fun invoke(param: Int): Boolean {
println("Lambda called with number: $param")
// Prints "Lambda called with number: 42"
return param == 42
}
})
你的类型似乎不对。您将lambdaTest定义为一个类型为(Int)->Boolean的函数,但随后在main中使用类型为(Somehing)->Unit的参数调用它。有些东西(您的参数)可以解释为Int,因此您的参数与(Int)->Unit匹配,但println()肯定不能解释为布尔值(仅作为一个单位)。
fun lambdaTest(someMethod: Function<Int, Boolean>) {
// Call invoke with an Int paramater. This returns a Boolean.
val isTheAnswerOfTheUniverse = someMethod.invoke(42)
}
// We can pass an anonymous class as the parameter
lambdaTest(object : Function<Int, Boolean>() {
override fun invoke(param: Int): Boolean {
println("Lambda called with number: $param")
// Prints "Lambda called with number: 42"
return param == 42
}
})
fun lambdaTest(someMethod: (Int) -> Boolean) {
val isTheAnswerOfTheUniverse = someMethod(42)
}
fun main(args: Array<String>) {
lambdaTest { param ->
println("Lambda called with number: $param")
// Prints "Lambda called with number: 42"
// The result of the last expression is returned
param == 42
}
}