1. 程式人生 > >Java——Lambda表示式

Java——Lambda表示式

一、Lambda表示式——函數語言程式設計

Lambda是JDK1.8推出的重要新特性。很多開發語言都開始支援函數語言程式設計,其中最具備代表性的就是haskell。

傳統面向物件開發

interface IMyInterface{
    void print();
}
class myClass implements IMyInterface{
    @Override
    public void print() {
        System.out.println("Hello World");
    }
}
public class Test {
    public static void main(String[] args) {
        IMyInterface iMyInterface = new myClass();
        iMyInterface.print();
    }
}

當然上面的操作我們可以用匿名內部類來完成

interface IMyInterface{
    void print();
}
public class Test {
    public static void main(String[] args) {
        IMyInterface iMyInterface = new IMyInterface() {
            @Override
            public void print() {
                System.out.println("Hello World");
            }
        };
        iMyInterface.print();
    }
}

對於此類操作有了更簡化實現,如果採用函數語言程式設計,則程式碼如下:

@FunctionalInterface
interface IMyInterface{
    void print();
}
public class Test {
    public static void main(String[] args) {
        IMyInterface iMyInterface = ()->System.out.println("Hello World");
        iMyInterface.print();
    }
}

面向物件語法最大的侷限:結構必須非常完整。

要想使用函數語言程式設計有一個前提:介面必須只有一個方法,如果有兩個方法,則無法使用函數語言程式設計。如果現在某個介面就是為了函數語言程式設計而生的,最好在定義時就讓其只能夠定義一個方法,所以有了一個新的註解:@FunctionalInterface,檢查此介面是否只有一個方法。

Lambda表示式語法:

1.
單行無返回值
()-> 語句;
2.
單行有返回值;
()-> 返回值;不用寫return
3.
多行無返回值
()->{
    語句
};
4.
多行有返回值
()->{
     語句
    return 返回值;   
};
@FunctionalInterface
interface IMyInterface{
    int print(int x,int y);
}
class Test{
    public static void main(String[] args) {
        //單行有返回值,不用寫return
        IMyInterface iMyInterface = (x,y)-> x * y;
        System.out.println(iMyInterface.print(2,3));
    }
}
@FunctionalInterface
interface IMyInterface{
    int print(int x,int y);
}
class Test{
    public static void main(String[] args) {
        //多行有返回值,需要寫{}和return
        IMyInterface iMyInterface = (x,y)-> {
            x = x + y;
            y = x - y;
            x = x - y;
            return x - y;
        };
        System.out.println(iMyInterface.print(2,3));
    }
}