函数式编程-Lambda的延迟执行

函数式编程

在兼顾面向对象特性的基础上,Java语言通过Lambda表达式与方法引用等,为开发者打开函数式编程的大门,下面我们做一个初探

Lambda的延迟执行

 有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费,而Lambda表达式是延迟执行的,这正可以作为解决方案,提升性能

性能浪费的日志案例

注:日历可以帮助我们快速的定位问题 记录程序运行过程中的情况 以便项目的监控和优化

日志案例:

代码:

/*
性能浪费的日志案例:
    发现以下代码存在的一些性能浪费的问题
    调用show方法,传递的第二个参数是一个拼接后的字符串
    先把字符串拼接好,在调用show
    show方法如果传递的日志等级不是一级那么就不会输出拼接后的字符串
    所以感觉字符串就白拼接了,存在了浪费
 */
public class AshowLog {
    //定义一个根据日志的级别,显示日志信息的方法
    public static void show(int level,String message){
        //对日志的等级进行判断,如果是1级别,那么输出日志信息
        if (level==1){
            System.out.println(message);
        }
    }
    public static void main(String[] args) {
        //定义三个日志信息
        String msg = "Hello";
        String msg2 = "World";
        String msg3 = "java";
        //调用show方法,传递日志级别和日志信息
        show(1, msg+msg2+msg3);
    }
}

 

使用Lambda优化日志案例

Lambda的特点:延迟加载

Lambda的使用前提 必须存在函数式接口

函数式接口:

public interface BFunctionalInterface2 {
    public abstract String method();
}

类:

public class AshowLog2 {
    public static void show(int level,BFunctionalInterface2 bf){
        if (level==1){
            System.out.println(bf.method());
        }
    }

    public static void main(String[] args) {
        String msg = "Hello";
        String msg2 = "World";
        String msg3 = "java";
        show(2,()->{
            return  msg+msg2+msg3;
        });
    }
}

使用Lambda表达式做完参数传递 仅仅是把参数传递到showLog方法中

只有满足条件 日志的等级是1级才会调用接口MessageBuilder中的方法builderMessage 才会进行字符串的拼接

如果条件不满足 日志的等级不是1级 那么MessageBuilder中的方法builderMessage 不会执行 

所以不存在新能的浪费

测试代码:

public class AshowLog2 {
    public static void show(int level,BFunctionalInterface2 bf){
        if (level==1){
            System.out.println(bf.method());
        }
    }

    public static void main(String[] args) {
        String msg = "Hello";
        String msg2 = "World";
        String msg3 = "java";
        show(1,()->{
            System.out.println("程序合理执行");
            return  msg+msg2+msg3;
        });
    }
}

 

运行结果:

 

posted @ 2022-08-20 21:26  monkey大佬  阅读(272)  评论(0)    收藏  举报