1. 在遇到这个问题之前,我并不理解函数式编程有什么有点,Lambda形式的代码到底比普通方法的优势到底在哪里,我一直不理解,看到一个小例子,做一总结
2. 针对日志打印问题做一个举例
目标:
1. 判断日志级别
2. 根据级别决定是否显示日志
3. 普通方法:
public class DemoLog {
public static void showLog(int level, String mesg){
// 判断日志级别,无论是什么级别,参数mesg都已经拼接了字符串,如果不必输出,拼接则浪费时间
if (level == 1)
System.out.println(mesg);
}
public static void main(String[] args) {
String ms1 = " hello ";
String ms2 = " the ";
String ms3 = " word ";
// 留意调用位置,ms1 + ms2 + ms3拼接花费了时间
showLog(1, ms1 + ms2 + ms3);
}
}
4. 使用Lambda表达方法
定义一个函数式接口
@FunctionalInterface
//@FunctionalInterface是检测函数是否是函数式接口
public interface MyfuInter {
public abstract String buldmes();
}
函数式编程
public class DemoLog1 {
public static void showLog(int level, MyfuInter mb) {
// 判断执行级别
if (level == 1)
System.out.println(mb.buldmes());
}
public static void main(String[] args) {
String ms1 = "hello";
String ms2 = " the ";
String ms3 = " word ";
// 注意调用位置
showLog(1, () -> {
// 用于测试Lambda延迟执行
System.out.println("不满足条件不执行");
return ms1 + ms2 + ms3;
}
);
}
}
5. 普通方法和Lambda表达方法的区别:
普通方法:在调用之前就已经做了字符串 ms1 + ms2 + ms3 的拼接工作,当不需要输出日志时候,这种拼接其实是做了无用功,这将有一定的开销。
Lambda表达方法:具有延迟加载的特性,前提是存在函数式接口,这样在调用时候,先进性条件判断,然后再进行拼接,否则,函数体内的方法不执行,因此节约了时间开销。