1. 程式人生 > 實用技巧 >lambda表示式(jdk8新特性)

lambda表示式(jdk8新特性)

函式式介面

如果一個介面中只有一個抽象方法,那麼這個介面就是函式式介面

當介面是函式式介面時,可以使用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);