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);

results matching ""

    No results matching ""