使用Lambda优化日志案例
生活随笔
收集整理的這篇文章主要介紹了
使用Lambda优化日志案例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
體驗Lambda的更優(yōu)寫法
使用Lambda必然需要一個函數(shù)式接口:
package com.learn.demo02.Lambda;@FunctionalInterface public interface MessageBuilder {//定義一個拼接消息的抽象方法,返回被拼接的消息public abstract String builderMessage(); }然后對log 方法進行改造:
package com.learn.demo02.Lambda; /*使用Lambda優(yōu)化日志案例Lambda的特點:延遲加載Lambda的使用前提,必須存在函數(shù)式接口*/ public class Demo02Lambda {//定義一個顯示日志的方法,方法的參數(shù)傳遞日志的等級和MessageBuilder接口public static void showLog(int level, MessageBuilder mb){//對日志的等級進行判斷,如果是1級,則調(diào)用MessageBuilder接口中的builderMessage方法if(level==1){System.out.println(mb.builderMessage());}}public static void main(String[] args) {//定義三個日志信息String msg1 = "Hello";String msg2 = "World";String msg3 = "Java";//調(diào)用showLog方法,參數(shù)MessageBuilder是一個函數(shù)式接口,所以可以傳遞Lambda表達式/*showLog(2,()->{//返回一個拼接好的字符串return msg1+msg2+msg3;});*//*使用Lambda表達式作為參數(shù)傳遞,僅僅是把參數(shù)傳遞到showLog方法中只有滿足條件,日志的等級是1級才會調(diào)用接口MessageBuilder中的方法builderMessage才會進行字符串的拼接如果條件不滿足,日志的等級不是1級那么MessageBuilder接口中的方法builderMessage也不會執(zhí)行所以拼接字符串的代碼也不會執(zhí)行所以不會存在性能的浪費*/showLog(1,()->{System.out.println("不滿足條件不執(zhí)行");//返回一個拼接好的字符串return msg1+msg2+msg3;});} }從結(jié)果中可以看出,在不符合級別要求的情況下,Lambda將不會執(zhí)行。從而達到節(jié)省性能的效果。
擴展:實際上使用內(nèi)部類也可以達到同樣的效果,只是將代碼操作延遲到了另外一個對象當中通過調(diào)用方法來完成。而是否調(diào)用其所在方法是在條件判斷之后才執(zhí)行的。
總結(jié)
以上是生活随笔為你收集整理的使用Lambda优化日志案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能浪费的日志案例
- 下一篇: 函数式接口作为方法的参数案例