Lambda運算式
很多時候某類別我們只會創立一次物件,並且使用這物件一次,但是卻要花費大量的處理,從class定義,object創立,到object的使用這一大個流程,都可以直接在一個括號內處理完,而此種寫法稱為Lambda
- 沒有方法名稱,擁有參數
- 不用宣告建立,適合只用一次的地方
基本語法
(參數) -> 運算式/程式區塊{ }
e.g.
(x) -> x*2;
(int a,int b) -> {return a+b;}
(String s) -> {System.out.println(s);}
//也可以沒有參數
() -> {return 3.14;}
e.g. 用Lambda完成物件排序
import java.util.*;
class Student{
private String name;
public Student(String name) {this.name=name;}
public String getName(){return name;}
}
public class test{
public static void main(String args[]){
Student[] std1={new Student("Tom"),new Student("Jane"),new Student("Mary")};
Student[] std2={new Student("Tom"),new Student("Jane"),new Student("Mary")};
//使用傳統Comparator物件進行排序
Arrays.sort(std1,new Comparator<Student>(){
public int compare(Student first,Student second){
return first.getName().compareTo(second.getName());
}
});
//用Lambda語法
Arrays.sort(std2,(first,second)->first.getName().compareTo(second.getName()));
}
}
函數介面
為只有單一虛擬方法的介面,那就很適合用Lambda式來表達
Lambda的演化過程
/定義函數介面
interface Ilike{
void like();
}
// 1. 外部創立新類別
class Like1 implements Ilike{
public void like(){
System.out.println("i like 1");
}
}
public class Lambda{
// 2. 創立靜態內部類
static class Like2 implements Ilike{
public void like(){
System.out.println("i like 2");
}
}
public static void main(String args[]){
Ilike l =new Like1();
l.like();
l=new Like2();
l.like();
// 3. 創立局部內部類
class Like3 implements Ilike{
public void like(){
System.out.println("i like 3");
}
}
l=new Like3();
l.like();
// 4. 創立匿名內部類,沒有類的名稱,必須借助inferface/superclass
Ilike l = new Ilike() {
public void like(){
System.out.println("i like 4");
}
};
l.like();
// 5. Lambda
Ilike l=()->{
System.out.println("i like 5");
};
l.like();
}
}