用java函數式編程——Lambda表達式

函數式編程

很多開發語言都開始支持函數式編程,其中最具備代表性的就是haskell。函數式編程和麪向對象編程可以理解爲兩大開發陣營。

在函數式編程中,所有的數據都是不可變的,不同的函數之間通過數據流來交換信息,函數享有跟數據一樣的地位,可以作爲參數傳遞給下一個函數,同時也可以作爲返回值。函數式編程的表達方式更加符合人類日常生活中的語法,代碼可讀性也更強。實現同樣的功能,函數式編程比面向對象編程要少代碼,所以更加容易看懂和理解。


與面向對象編程代碼上的區別(用java演示)

java在jdk1.8之後,推出了lambda表達式,用於函數式編程,操作符爲->

看 一段代碼:

java中利用接口定義一個方法,由匿名內部子類實現,實例化後調用。

interface IMessage {
    void print();
}

public class lambda表達式 {
    public static void main(String[] args) {
        IMessage message = new IMessage() {
            @Override
            public void print() {
                System.out.println("hello IMessage");
            }
        };
        message.print();
    }
}

實現同樣的功能,用lambda表達式:

interface IMessage {
    void print();
}
public class lambda表達式 {
    public static void main(String[] args) {
        IMessage message =  () -> System.out.println("hello IMessage");
        message.print();
    }
}

這就是lambda表達式基本用法。

總結一下

1、面向對象語法最大的侷限:結構必須非常完整。

2、函數式編程簡單,容易實現,但接口只能有一個方法,不然無法確定覆寫哪個方法。

3、所以有了一個新的註解: @FunctionalInterface,表示這個是函數式編程的接口,如果有2個以上方法就會提示錯誤。

4、語法:(參數)-> {覆寫接口唯一方法的代碼}

(參數)-> {覆寫接口唯一方法的代碼}

多行代碼演示: 

interface IMessage {
    void print();
}
public class lambda表達式 {
    public static void main(String[] args) {
        IMessage message =  () -> {
            System.out.println("hello IMessage1");
            System.out.println("hello IMessage2");
            System.out.println("hello IMessage3");
        };
        message.print();
    }
}

用處

比如多線程Thread覆寫run的時候

public class Test {
    public static void main(String[] args) {
        //方式一
        Runnable runnable = () -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        };
        Thread thread = new Thread(runnable);
        
        //方式二
        Thread thread1 = new Thread(()->{
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章