Lambda
Prerequisites:
介面只有一個抽象方法,可使用Lambda簡化實作介面的語法。
Lambda又稱Functional Interface函式介面。
實作Interface的各種方式
1
2
3
public interface Fly {
void fly();
}
靜態內部類別
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test2 {
static class Bird implements Fly {
@Override
public void fly() {
System.out.println("Bird fly");
}
}
public static void main(String[] args) {
Fly bird = new Bird();
bird.fly();
}
}
區域內部類別
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
class Balloon implements Fly {
@Override
public void fly() {
System.out.println("氣球飛");
}
}
Fly balloon = new Balloon();
balloon.fly();
}
匿名類別
1
2
3
4
5
6
7
Fly mosquito = new Fly() {
@Override
public void fly() {
System.out.println("蚊子飛");
}
};
mosquito.fly();
Lambda
把上面的程式碼,留下括號()與花括號{},其它全部去掉。
new Fly() {
@Override
public void fly() {
System.out.println(“蚊子飛”);
}
};
括號()與花括號{}之間有一個箭頭 -> 作為區隔
1
2
3
4
Fly helicopter = () -> {
System.out.println("直升機飛");
};
helicopter.fly();
若花括號{}主體(body)只有一行程式,可以去掉花括號。
1
2
Fly helicopter = () -> System.out.println("直升機飛");
helicopter.fly();
有參數的Lambda
Interface加上參數,hour小時,km是公里。
1
2
3
public interface Fly {
void fly(float km, int hour);
}
1
2
3
4
Fly helicopter = (float km, int hour) -> {
System.out.println("直升機飛 " + hour + " 小時 " + km + "公里");
};
helicopter.fly(600, 3);
去掉參數類型
1
2
3
4
Fly helicopter = (km, hour) -> {
System.out.println("直升機飛 " + hour + " 小時 " + km + "公里");
};
helicopter.fly(600, 3);
若參數只有一個,也可以去掉括號()
1
2
Fly helicopter = km -> System.out.println("直升機飛 " + km + "公里");
helicopter.fly(600);