java中函数式编程及使用

1. 在遇到这个问题之前,我并不理解函数式编程有什么有点,Lambda形式的代码到底比普通方法的优势到底在哪里,我一直不理解,看到一个小例子,做一总结

2. 针对日志打印问题做一个举例

目标:

1. 判断日志级别

2. 根据级别决定是否显示日志

3. 普通方法:

public class DemoLog {
    public static void showLog(int level, String mesg){
        // 判断日志级别,无论是什么级别,参数mesg都已经拼接了字符串,如果不必输出,拼接则浪费时间
        if (level == 1)
            System.out.println(mesg);
    }

    public static void main(String[] args) {
        String ms1 = " hello ";
        String ms2 = " the ";
        String ms3 = " word ";
        // 留意调用位置,ms1 + ms2 + ms3拼接花费了时间
        showLog(1, ms1 + ms2 + ms3);
    }
}

4. 使用Lambda表达方法

定义一个函数式接口

@FunctionalInterface
//@FunctionalInterface是检测函数是否是函数式接口
public interface MyfuInter {
    public abstract String buldmes();
}

函数式编程

public class DemoLog1 {
    public static void showLog(int level, MyfuInter mb) {
        // 判断执行级别
        if (level == 1)
            System.out.println(mb.buldmes());
    }

    public static void main(String[] args) {
        String ms1 = "hello";
        String ms2 = " the ";
        String ms3 = " word ";
        // 注意调用位置
        showLog(1, () -> {
                    // 用于测试Lambda延迟执行
                    System.out.println("不满足条件不执行");
                    return ms1 + ms2 + ms3;
                }
        );
    }
}

5. 普通方法和Lambda表达方法的区别:

普通方法:在调用之前就已经做了字符串 ms1 + ms2 + ms3 的拼接工作,当不需要输出日志时候,这种拼接其实是做了无用功,这将有一定的开销。

Lambda表达方法:具有延迟加载的特性,前提是存在函数式接口,这样在调用时候,先进性条件判断,然后再进行拼接,否则,函数体内的方法不执行,因此节约了时间开销。

6. 这个延迟写特性用这个实例较好理解,纯属个人拙见,恳请指正

发布了103 篇原创文章 · 获赞 55 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/l8947943/article/details/104214201