当前位置:   article > 正文

函数式接口:Lambda表达式的优点_函数式接口优势

函数式接口优势

java8的新特性就是Lambda表达式,那么,Lambda表达式到底能带来哪些优点。我这里总结一个最最最常见的优点--性能优化。

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口可以被隐式转换为 lambda 表达式。

一:优化性能

先看一段常见的程序

  1. public class MyLambda {
  2. public static void showLog(int level, String mess) {
  3. if (level == 1) {
  4. System.out.println(mess);
  5. }
  6. }
  7. public static void main(String[] args) {
  8. String mess1 = "Hello";
  9. String mess2 = "java";
  10. showLog(1, mess1 + mess2);
  11. }
  12. }

这段程序很简单,但是,会造成性能上的浪费。你看啊,这里调用showLog函数,直接传递1以及mess1和mess2拼接好的字符串传过去,显示Hellojava。但是,如果传递的level是不是1,那么,就不会输出Hellojava,但是,还是会把mess1和mess2拼接好的字符串传递过去。

下来,看一下Lambda表达式写这段程序。

函数式接口IMyLambda

  1. @FunctionalInterface
  2. public interface IMyLambda {
  3. String buildMess();
  4. }

测试类

  1. public class MyLambda {
  2. public static void showLog(int level, IMyLambda mess) {
  3. if (level == 1) {
  4. System.out.println(mess.buildMess());
  5. }
  6. }
  7. public static void main(String[] args) {
  8. String mess1 = "Hello";
  9. String mess2 = "java";
  10. //此处,第二个参数是函数式接口类型,可以写Lambda表达式进行表示
  11. showLog(1, () -> {
  12. return mess1 + mess2;
  13. });
  14. }
  15. }

与上面普通方法不同的是:上面的会把拼接字符串mess1 + mess2传给showLog函数;

而使用Lambda表达式,仅仅是把参数传递到showLog方法中,如果第一个参数level是1,才会调用接口IMyLambda中的方法buildMess方法,才会进行字符串的拼接。否则,如果不是1,那么就不会调用接口中的方法,不会进行字符串的拼接。所以,Lambda表达式在一定程度上,优化了程序。

二:书写简单

Lambda表达式和匿名内部类很像,比如:

Lambda表达式写法:

  1. showLog(1, () -> {
  2. return mess1 + mess2;
  3. });

匿名内部类写法:

  1. showLog(1, new IMyLambda() {
  2. @Override
  3. public String buildMess() {
  4. return mess1 + mess2;
  5. }
  6. });

但是,Lambda仅仅适用于函数式接口,所以,在参数为函数式接口的方法中,我们可以尽量使用Lambda表达式,不仅书写简单,还能优化性能。比如,最有名的Runnable接口的run()方法了。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号