lambda表達式(jdk8特性)
1.為什么要用lambda表達式
原因:因為我們有時候需要用到很多類,但是,這些類我們只用一次或者兩次,所以我們用匿名內部類,但是匿名內部類多了還是很麻煩,所以用lambda表達式再次簡化這種簡單類
讓代碼更加簡潔,避免很多無意義的語句
函數式接口的定義?
lambda表達式使用的前提?
實現一個接口,接口只有一個方法。
lambda的簡化順序 :外部類->靜態內部類->局部內部類->匿名內部類->lambda
interface Person{
void say();
}
class Student1 implements Person{//第一個,一個外部的類,比較麻煩,代碼也簡單
@Override
public void say() {
System.out.println("學生1說了一句話");
}
}
public class LambdaTest {
static class Student2 implements Person{//第2個,靜態內部類
@Override
public void say() {
System.out.println("學生2說了一句話");
}
}
public static void main(String[] args) {
Person s1 = new Student1();
s1.say();
Person s2 = new Student2();
s2.say();
class Student3 implements Person{//第3個,局部內部類
@Override
public void say() {
System.out.println("學生3說了一句話");
}
}
Person s3 = new Student3();
s3.say();
Person s4 = new Person() {//匿名內部類,沒有類的名稱,必須借助接口或者父類
@Override
public void say() {
System.out.println("學生4說了一句話");
}
};
s4.say();
Person s5 = ()->{//lambda方法
System.out.println("學生5說了一句話");
};
s5.say();
}
}
lambda格式:怎么樣簡化成極限?一句?怎么簡化?
(參數列表)->{//參數列表可以繼續省掉類型聲明,一個形參可以省略括號,方法體只有一句可以省略{}
方法體
}
Pet pet1 = (String food)-> {
System.out.println(food);
};
Pet pet2 = (food)-> {//兩個參數的時候不能省略()
System.out.println(food);
};
Pet pet3 = food-> {
System.out.println(food);//方法體多句話的時候不能省略這句話
};
Pet pet4 = food->System.out.println(food);
Runnable接口,就一個run()方法,可以配合lambda