函数式编程和Lambda的延迟执行
函数式编程
在兼顾面向对象特性的基础上 java语言通过Lambda表达式与方法引用等 为开发者打开了函数式编程的大门
Lambda的延迟执行
有些场景的代码执行后 结果不一定会被使用 从而造成性能浪费 而Lambda表达式是延迟执行的 这正好可以解决方法 提升性能
性能浪费的日志案例
注:日历可以帮助我们快速的定位问题 记录程序运行过程中的情况 以便项目的监控和优化
日志案例:
代码:
  public static  void showLog(int level,String mess){
        if (level==1){
            System.out.println(mess);
        }
    }
    public static void main(String[] args) {
        String mess1="Hello";
        String mess2="World";
        String mess3="JAVA";
        showLog(1,mess1+mess2+mess3);
    }
发现以上代码存在的一些性能浪费的问题
当我们调用showLog方法 传递的第二个参数是一个拼接后的字符串 先把字符串拼接好了 然后在调用showLog方法 showLog方法中如果传递的日志等级不是1级 那么就不是如此拼接后的字符串 所以感觉字符串就白拼接了 存在了浪费
使用Lambda优化日志案例
Lambda的特点:延迟加载
Lambda的使用前提 必须存在函数式接口
函数式接口:
@FunctionalInterface
public interface MessageBuilder {
    public abstract String builderMessage();
}
类:
public class demo02Logger {
    public static  void showLog(int level, MessageBuilder mb){
        if (level==1){
            System.out.println(mb.builderMessage());
        }
    }
    public static void main(String[] args) {
        String mess1="Hello";
        String mess2="World";
        String mess3="JAVA";
        showLog(1,()->{
            return mess1+mess2+mess3;
        });
    }
}
使用Lambda表达式做完参数传递 仅仅是把参数传递到showLog方法中
只有满足条件 日志的等级是1级才会调用接口MessageBuilder中的方法builderMessage 才会进行字符串的拼接
如果条件不满足 日志的等级不是1级 那么MessageBuilder中的方法builderMessage 不会执行
所以不存在新能的浪费
测试代码:
public class demo02Logger {
    public static  void showLog(int level, MessageBuilder mb){
        if (level==1){
            System.out.println(mb.builderMessage());
        }
    }
    public static void main(String[] args) {
        String mess1="Hello";
        String mess2="World";
        String mess3="JAVA";
        showLog(2,()->{
            System.out.println("程序合理执行");
            return mess1+mess2+mess3;
        });
    }
}
我们在lambda添加一个输出语句 并将级别改为2级
运行结果:

代码:
public class demo02Logger {
    public static  void showLog(int level, MessageBuilder mb){
        if (level==1){
            System.out.println(mb.builderMessage());
        }
    }
    public static void main(String[] args) {
        String mess1="Hello";
        String mess2="World";
        String mess3="JAVA";
        showLog(1,()->{
            System.out.println("程序合理执行");
            return mess1+mess2+mess3;
        });
    }
}
我们在lambda添加一个输出语句 并将级别改为1级
运行结果:

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号