函数式编程
在兼顾面向对象特性的基础上,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; }); } }
运行结果:
标签:String,msg3,show,编程,日志,Lambda,public,延迟 From: https://www.cnblogs.com/qihaokuan/p/16608524.html