1.Kotlin中使用
在java中有时候使用函数式编程的时候,有这种Producer,Consumer作为函数的参数的场景,在kotlin中的使用记录下;
fun randomProvier(c: (Double) -> Unit): Double {
var n = Math.random() // 步骤1:生成随机数
println("生成随机数") // 步骤2:
c(n) // 步骤3:随机数n作为参数,执行传入的代码逻辑
return n // 步骤4:返回随机数n
}
fun main() {
randomProvier { t ->
println("打印随机数参数") //步骤3.1
println(t) //步骤3.1
}
}
randomProvier的参数是一段执行逻辑,输入参数是一段代码逻辑;先生成一个随机数,然后随机数n作为执行这段代码逻辑的输入参数;之后返回n
如果要一个无参数的代码段逻辑,如下这么写就可以:
fun numberPrinter(s: () -> Double){
println(s())
}
函数作为参数在项目中的使用场景:需要在原来的多个函数执行逻辑前后加一部分逻辑;
比如原来有个函数
fun f1(){
xxxx
xxx
xx
}
现在需要在f1函数执行前之后加一些逻辑,在最后再加一些逻辑,如果手工添加的话,这样的地方太多,另外还很可能会漏掉,比如只在开头加了一段逻辑,结尾忘记了;可以定义一个方法,
fun main() {
f2 { f1() }
}
fun f2(c: () -> Unit) {
println("执行方法之前添加逻辑")
c()
println("执行方法后添加逻辑")
}
fun f1(){
println("原来的逻辑")
}
执行结果输出:
执行方法之前添加逻辑 原来的逻辑 执行方法后添加逻辑
2.Java中使用
java中要区分几种情况: Function<T,R>?? ?接受一个输入参数,返回一个结果
public static void main(String[] args) {
String a="1123";
f1(b ->{
return b+"1";
},a);
}
static void f1(Function<String,String> f2,String a){
String result = f2.apply(a);
System.out.println(result);
}
Supplier?? ?无参数,返回一个结果,调用的时候()-> {xxx;return a;} Consumer?? ?接受一个输入参数,并且不返回任何结果
Runnable 无参数,无返回结果 BiFunction<T,U,R>?? ?接受两个输入参数的方法,并且返回一个结果 BiConsumer<T,U>?? ?接受两个输入参数的操作,并且不返回任何结果
其他类似
|