Java-Lambda expressions

Java8(JDK1.8)中加入了Lambda表达式:

降低匿名内部类的冗余,相当于简化版匿名内部类.(但与匿名内部类原理是不同的)

匿名内部类会生成Demo$1.class文件,而Lambda表达式不会生成.class文件,加载效率比匿名内部类高.

格式:
(参数列表) -> {一些重写方法的代码};

格式说明:
():接口中抽象方法的参数列表,无参就空着
->:传递的意思,将参数传给方法体{}
{}:重写接口中抽象方法的方法体

例://Lambda表达式实现多线程:
new Thread(()-> {
    ...//run方法的方法体
}).start();

整个Lambda表达式的内容:                    ()->{...};
其他部分是线程类对象的内容:       new Thread(Lambda表达式).start();
Lambda表达式的省略:
凡是根据上下文可推导出的内容,均可省略书写

可省略的内容:
1.(参数列表)    括号中参数列表的数据类型可省略
2.(参数列表)    括号中的参数若只有一个,其类型和()均可省略
3.{代码}        若{}中的代码仅一行,无论是否有返回值,均可省略: {}、return、分号
注:要省略,   {}、return、分号 必须一起省略


//省略版Lambda表达式创建新线程:
new Thread(()->
    ...//run方法的方法体
)).start();



        //Person数组排序,Lambda表达式原版
        Arrays.sort(array, (Person o1, Person o2) -> {
            return o1.getAge() - o2.getAge();
        });

        //Lambda表达式省略版本
        Arrays.sort(array, (o1, o2) -> o1.getAge() - o2.getAge());
Lambda表达式使用前提:

1.必须具有接口,且要求接口中有且仅有一个抽象方法("函数式接口")
2.必须具有上下文推断:方法的参数或局部变量类型必须为Lambda对应的接口类型

注:有且仅有一个抽象方法的接口,称为"函数式接口"

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325749023&siteId=291194637