函数式接口
接口中有且仅有一个抽象方法的接口叫做函数式接口
lambda使用条件
必须针对函数式接口使用
优化原理及lambda特性
lambda具有延时性
我们的程序在运行时,有时会运行一些没有必要的步骤,这些步骤增加了程序运行时间,降低了程序的运行效率。而lambda具有延时性,我们可以通过这种方法对程序进行优化
实现过程
没有被lambda优化的程序
public class Demo07 {
public static void mac(int f,String s){ //创建一个方法,如果整型参数为1,则输出字符型参数
if(f==1){
System.out.println(s);
}
}
public static void main(String[] args) {
String a="你好";
String b="java"; //字符型参数为二者拼接在一起
mac(4,a+b); //调用方法,虽然不满足条件,但是字符型参数还是进行了拼接,做出了多余的动作,浪费了程序执行速度
mac(1,a+b); //满足输出条件,程序正常输出
}
}
从程序中可以看出不管是否满足条件,作为参数的String s都将字符进行了拼接,如果不满足输出条件那么这个拼接就是毫无意义的运行,浪费了程序运行的效率
lambda优化后的程序
public class Demo06 {
public static void max(int a,Demo05 demo05){
if (a==1){
System.out.println(demo05.mdd());
}
}
public static void main(String[] args) {
String a="你好";
String b="java";
max(5,()->{
return a+b;
});
max(1,()->{
return a+b;
});
}
}
因为lambda具有延时执行的特性,所以当我们将其作为参数传入时,他只是被传入,并没有进行调用,他不会进行字符拼接,只有在函数式接口中的抽象方法被调用时,他才会执行字符拼接。也就是只有满足输出条件,需要对其调用输出时,他才会执行此步骤,这样大大减少了程序非必要运行的步骤,提高了程序的效率。