package cn.zal.demo02_log;
public class Demo01Log {
public static void main(String[] args) {
String s1="Java";
String s2="Hello";
String s3="World";
printLog(1, s1+s2+s3);
//当level等于2时不能打印,但是字符串仍然会拼接,造成性能浪费。
printLog(2, s1+s2+s3);
}
public static void printLog(int level,String msg){
if(level==1){
System.out.println(msg);
}
}
}
上面的代码可以看出,当main方法调用printLog打印msg信息时,只有当level=1时才能打印msg信息。
当main方法调用printLog(2, s1+s2+s3);
时,不能打印msg,但是s1,s2,s3仍然会拼接,从而造成性能浪费。
所以采用Lambda表达式延迟执行来解决这个问题。
package cn.zal.demo02_log;
/*接口*/
public interface LogBuilder {
String creatMessage();
}
package cn.zal.demo02_log;
public class Demo02Log {
public static void main(String[] args) {
String s1="Java";
String s2="Hello";
String s3="World";
printLog(1,()->{
return s1+s2+s3;
});
}
public static void printLog(int level,LogBuilder logBuilder){
if(level==1){
String str=logBuilder.creatMessage();
System.out.println(str);
}
}
}
上面代码的执行流程:首先执行main方法,当调用printLog方法时,将参数传给方法,当执行creatMessage()方法时,Lambda表达式才启用,进行字符串拼接,再打印。