天天看點

Lambda函數式程式設計思想

一,函數式程式設計思想

1.1 概念

在數學中,函數就是一套計算方案。它重點放在 “ 拿什麼東西就能做什麼事情 ”。

對于面向對象的程式設計思想而言,我們必須明确是哪一個對象來做這件事情的,

而函數式程式設計思想的重點是 “ 做什麼,不是以什麼形式來做 。”

1.2 函數式程式設計思想和面向對象思想比較案例

new Thread(new Runnable(){
    @Override
    public void run() {
        for(int i = 1;i <= 100; i++){
            System.out.println(Thread.currentThread().getName() +"---"+i);
        }
    }
}).start();


new Thread(() -> {
    for(int i = 1;i <= 100; i++){
        System.out.println(Thread.currentThread().getName() +"---"+i);
    }
}).start();      
如果要使用實作 Runnable 接口的方式開啟線程,我們必須建立出 Runnable 的實作類對象,并重寫 run() 方法明确線程中要執行的任務。我們的重點是開啟線程,讓線程執行指定的任務,而不是建立 Runnable 的實作類對象也不是去重寫 run() 方法。實際上,隻有 run() 方法中的方法體才有重點。

1.3 Lambda表達式的文法

組成:
  1. 參數清單
  2. 箭頭
  3. 代碼塊
格式:
(參數清單)-> { 代碼塊 }      
格式說明:
  1. ():表示接口中抽象方法的參數清單;方法沒有參數的話就留白,有的話就跟着接口中的這個方法的參數清單來寫。
  2. ->:傳遞的意思,把參數傳遞給方法體
  3. {}:重寫接口抽象方法的方法體
Lambda表達式中可以省略的内容:
  1. 參數清單中的類型
  2. 如果參數隻有一個,那麼連 " () "也能省略,此時 " () " 省略情況下,類型一定不能寫
  3. 如果 " {} " 中隻有一行代碼,
  1. 重寫的方法沒有傳回值:可以省略 " {} " ,此時該語句的分号必須省略
  2. 重寫的方法有傳回值:可以省略 " {} ",此時 " reuturn " 和 分号 必須省略
Lambda 的使用前提:
  1. 使用 Lambda 表達式必須要有接口,接口中有且隻能有一個抽象方法,預設的方法、靜态的方法、私有方法也可以包含。
  2. 方法的參數必須是函數式接口,才能使用 Lambda 作為該接口的執行個體
函數式接口:有且僅有一個抽象方法的接口,可以通過 @FunctionalInterface 注解來校驗該接口是否的函數式接口

1.4 常見的函數式接口

1.4.1 Supplier

該接口中有一個無參的抽象方法:T get()

它用來擷取一個泛型參數指定的資料類型的對象

1.4.2 Predicate
該接口中有一個無參的抽象方法:boolean test(T t),兩個預設方法:and() 、or()

繼續閱讀