Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在高阶函数中使用参数/s调用lambda_Java_Android_Functional Programming_Kotlin - Fatal编程技术网

Java 在高阶函数中使用参数/s调用lambda

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>.

我是java/kotlin函数式编程的新手,并进行了一些实践。 只是想知道调用lambda时如何传递lambda的参数。例如,在这里调用someMethod,我需要传递一个Int参数

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
    }
}