函数式接口在java中是指:有且仅有一个抽象方法的接口
函数式接口,即适用于函数式编程场景的接口。而java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
备注:“语法糖"是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的for-each语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法糖”,但是二者在原理上是不同的。
@FunctionalInterface
interface MessageBuilder {
String buildMessage();
}
public class LambdaTest2 {
private static void log(int level, MessageBuilder builder) {
if (level == 1) {
// 实际上利用内部类 延迟的原理,代码不相关 无需进入到启动代理执行
System.out.println(builder.buildMessage());
}
}
public static void main(String[] args) {
String msgA = "Hello";
String msgB = "World";
String msgC = "Java";
log(1,()->{
System.out.println("lambda 是否执行了");
return msgA + msgB + msgC;
});
}
}
package com.shenmazong.lambda;
import java.util.function.Supplier;
/**
* @program: server-java-demo
* @description: 求数组元素最大值
* @author: 亮子说编程
* @create: 2020-10-19 16:11
**/
public class use_Supplier_Max_Value {
private static int getMax(Supplier<Integer> suply) {
return suply.get();
}
public static void main(String[] args) {
Integer [] data = new Integer[] {6,5,4,3,2,1};
int reslut = getMax(()->{
int max=0;
for (int i = 0; i < data.length; i++) {
max = Math.max(max, data[i]);
}
return max;
});
System.out.println(reslut);
}
}