目錄
一、Lambda簡(jiǎn)介
二、Lambda使用前提
三、Lambda語(yǔ)法
1.操作符
a."->"
?b."::"
2.格式?
a.無(wú)參數(shù)
b.有參數(shù)
四、Lambda演化過(guò)程
五、Lambda實(shí)現(xiàn)排序
一、Lambda簡(jiǎn)介
Lambda 表達(dá)式,也可稱(chēng)為閉包,它是推動(dòng) Java 8 發(fā)布的最重要新特性。Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡(jiǎn)潔緊湊??梢园袻ambda表達(dá)式理解為簡(jiǎn)潔的表示可傳遞的匿名函數(shù)的一種方式:它沒(méi)有名稱(chēng),但它有參數(shù)列表,函數(shù)主體,返回類(lèi)型。
二、Lambda使用前提
接口有且僅有一個(gè)抽象方法才能使用lambad表達(dá)式。函數(shù)式接口是指,有且僅有一個(gè)抽象方法的接口。?
三、Lambda語(yǔ)法
1.操作符
a."->"
java中,引入了一個(gè)新的操作符“->”,稱(chēng)為L(zhǎng)ambda操作符;箭頭操作符將Lambda分成了兩個(gè)部分。
左側(cè):Lambda表達(dá)式的參數(shù)
右側(cè):Lambda表達(dá)式中所需要執(zhí)行的功能,即Lambda函數(shù)體,也可以是 Lambda 的返回值文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-436138.html
?b."::"
方法引用使用的一對(duì)冒號(hào)?::?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436138.html
2.格式?
a.無(wú)參數(shù)
() -> {statements;}
() -> expression;
b.有參數(shù)
(parameters) -> {statements;};
(parameters) -> expression;
四、Lambda演化過(guò)程
public interface Interface {
public int add(int a);
}
public class Impl implements Interface {
@Override
public int add(int a) {
return a + 1;
}
}
public class Test {
public static void main(String[] args) {
Interface im1 = new Impl();
int a = im1.add(20);
System.out.println(a);// 外部類(lèi)
class Impl2 implements Interface {
public int add(int a) {
return a + 1;
}
}
Interface im2 = new Impl2();
int a1 = im2.add(30);
System.out.println(a1);// 內(nèi)部類(lèi)
Interface im3 = new Interface() {
public int add(int a) {
return a;
}
};
System.out.println(im3.add(40));// 匿名內(nèi)部類(lèi)
Interface im4 = (b) -> {
return b + 1;
};// (b)方法
System.out.println(im4.add(100));// 常規(guī)lambda
Interface im5 = (b) -> b + 1;
System.out.println(im5.add(200));// 簡(jiǎn)化lambda
Test p1 = new Test();
Interface im6 = p1::add;
System.out.println(im6.add(1000));
}
public int add(int a) {
return a + 1;
}
}
五、Lambda實(shí)現(xiàn)排序
public class Dog {
private int age;
private String name;
public Dog() {
}
public Dog(int age, String name) {
this.age = age;
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public String toString() {
return "年齡:" + age + " 名字:" + name;
}
}
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Dog> list = new ArrayList<>();
list.add(new Dog(5, "dog5"));
list.add(new Dog(3, "dog3"));
list.add(new Dog(2, "dog2"));
list.add(new Dog(1, "dog1"));
list.add(new Dog(4, "dog4"));
list.sort(new Comparator<Dog>() {
public int compare(Dog o1, Dog o2) {
return o2.getAge() - o1.getAge();
}
});// 匿名內(nèi)部類(lèi)
for (Dog dog : list) {
System.out.println(dog);
}
System.out.println("-------------");
list.sort((o1, o2) -> o1.getAge() - o2.getAge());// lambda表達(dá)式
for (Dog dog : list) {
System.out.println(dog);
}
}
}
到了這里,關(guān)于Java- Lambda表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!