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表达方法:具有延迟加载的特性,前提是存在函数式接口,这样在调用时候,先进性条件判断,然后再进行拼接,否则,函数体内的方法不执行,因此节约了时间开销。

6. 这个延迟写特性用这个实例较好理解,纯属个人拙见,恳请指正