Lambda表达式

从JDK8开始(JDK1.8),加入了Lambda表达式的重量级新特性,为我们打开了新世界的大门。

         

匿名内部类

一方面匿名内部类可以省去实现类的定义;然而另一方面,匿名内部类的语法,确实太复杂了。

public class Demo {
    public static void main(String[] args) {
        new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println("创建了新的线程");
            }
        }).start();
    }
}

我们可以用Lambda表达式去简化匿名类中一些冗余的代码,使得同样的表达在Lambda语法中更加简单。

Lambda标准格式

由三部分组成:a.一些参数 b.一个箭头 c.一段代码

格式:

(参数列表)  ~> {一些重写方法的代码}

( ):接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数用逗号隔离。

~>:传递的意思,把参数传递给方法体{ }。

{ }:重写接口抽象方法的方法体。

上述代代码可以简化为如下:

new Thread(()->{
                System.out.println("创建了新的线程");
              }
        ).start();

接下来还有一个例子如下,给定一个Cook接口,使用Lambda表达式来在方法中传递创建的接口实例:

public interface Cook {
    void makeFood();
}
public class Demo {
    public static void main(String[] args) {
        invokeCook(()->{
            System.out.println("饭做好了");
        });
    }
    public static void invokeCook(Cook cook){
        cook.makeFood();
    }
}

Lambda表达式:是可推导,可以省略的

凡是根据上下文推导出来的内容,都可以省略书写

可以省略的书写内容如下:

1.(参数列表):括号中参数列表的数据类型,可以省略不写。

2.(参数列表):括号中的参数只有一个的,那么类型和()都可以省略。

3.{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略)({},returm,分号)

注意:要省略{},return,分号必须一起省略。

实例如下:

public interface Cook {
    String makeFood(String str,String str1);
}
public class Demo {
    public static void main(String[] args) {
        invokeCook((str,str1)->
            str + str1
        );
    }
    public static void invokeCook(Cook cook){
        cook.makeFood("生日","蛋糕");
    }
}

Lambda表达式就说到这了~

 

版权声明:本文为hutree原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hutree/p/12379806.html