首页 > 编程语言 >函数式编程和Lambda的延迟执行

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

时间:2022-10-17 17:26:47浏览次数:59  
标签:showLog String void 编程 mess1 Lambda public 延迟

函数式编程

在兼顾面向对象特性的基础上 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级

运行结果:

标签:showLog,String,void,编程,mess1,Lambda,public,延迟
From: https://www.cnblogs.com/shenziyi/p/16798456.html

相关文章