lambda表示式(jdk8新特性)
阿新 • • 發佈:2020-09-10
函式式介面
如果一個介面中只有一個抽象方法,那麼這個介面就是函式式介面
當介面是函式式介面時,可以使用lambda表示式簡化程式碼
從外部類到lambda表示式
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); demo.test(); } // 2. 內部類 class UserImpl2 implements IUser { @Override public void print() { System.out.println("我是一個內部類!"); } } // 測試方法 public void test() { // 呼叫外部類 IUser user = new UserImpl(); user.print(); // 呼叫內部類 user = new UserImpl2(); user.print(); // 3. 區域性內部類 class UserImpl3 implements IUser { @Override public void print() { System.out.println("我是一個區域性內部類!"); } } // 呼叫區域性內部類 user = new UserImpl3(); user.print(); // 4. 匿名內部類 user = new IUser() { @Override public void print() { System.out.println("我是一個匿名內部類!"); } }; user.print(); // 5. lambda表示式 user = () -> { System.out.println("我是一個lambda表示式!"); }; user.print(); } } // 0. 定義一個函式式介面 interface IUser { // 只能有一個方法 void print(); } // 1. 外部類 class UserImpl implements IUser { @Override public void print() { System.out.println("我是一個外部類!"); } }
執行結果
我是一個外部類!
我是一個內部類!
我是一個區域性內部類!
我是一個匿名內部類!
我是一個lambda表示式!
當lambda表示式的方法體中只有一條語句,可以省略{}
user = () -> System.out.println("我是一個lambda表示式!");
因為只有一條語句,道理和if是一樣的
if (true)
System.out.println("hello world");
帶引數的lamdba表示式
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); demo.test(); } // 測試方法 public void test() { // lambda表示式 IUser user = (String a) -> System.out.println(a); user.print("hello world"); } } // 定義一個函式式介面 interface IUser { // 只能有一個方法 void print(String a); }
引數型別可以省略
IUser user = (a) -> System.out.println(a);
如果只有一個引數,引數型別省略後()也可以省略
IUser user = a -> System.out.println(a);
多個引數的lambda表示式
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); demo.test(); } // 測試方法 public void test() { // lambda表示式 IUser user = (a, b) -> System.out.println(a + b); user.print("Hello", "World"); } } // 定義一個函式式介面 interface IUser { // 只能有一個方法 void print(String a, String b); }
IDEA自動替換成lambda
在IDEA中建立匿名內部類時,IDEA會把new部分顯示成灰色,可以一鍵替換成lambda表示式
將滑鼠放在灰色程式碼部分,按“Alt + Enter”,點選“Replace with lambda”,會直接替換成lambda表示式
IUser user = (a, b) -> System.out.println(a + b);