一,函數式程式設計思想
1.1 概念
在數學中,函數就是一套計算方案。它重點放在 “ 拿什麼東西就能做什麼事情 ”。
對于面向對象的程式設計思想而言,我們必須明确是哪一個對象來做這件事情的,
而函數式程式設計思想的重點是 “ 做什麼,不是以什麼形式來做 。”
1.2 函數式程式設計思想和面向對象思想比較案例
如果要使用實作 Runnable 接口的方式開啟線程,我們必須建立出 Runnable 的實作類對象,并重寫 run() 方法明确線程中要執行的任務。我們的重點是開啟線程,讓線程執行指定的任務,而不是建立 Runnable 的實作類對象也不是去重寫 run() 方法。實際上,隻有 run() 方法中的方法體才有重點。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();
1.3 Lambda表達式的文法
組成:格式:
- 參數清單
- 箭頭
- 代碼塊
格式說明:(參數清單)-> { 代碼塊 }
Lambda表達式中可以省略的内容:
- ():表示接口中抽象方法的參數清單;方法沒有參數的話就留白,有的話就跟着接口中的這個方法的參數清單來寫。
- ->:傳遞的意思,把參數傳遞給方法體
- {}:重寫接口抽象方法的方法體
- 參數清單中的類型
- 如果參數隻有一個,那麼連 " () "也能省略,此時 " () " 省略情況下,類型一定不能寫
- 如果 " {} " 中隻有一行代碼,
Lambda 的使用前提:
- 重寫的方法沒有傳回值:可以省略 " {} " ,此時該語句的分号必須省略
- 重寫的方法有傳回值:可以省略 " {} ",此時 " reuturn " 和 分号 必須省略
函數式接口:有且僅有一個抽象方法的接口,可以通過 @FunctionalInterface 注解來校驗該接口是否的函數式接口
- 使用 Lambda 表達式必須要有接口,接口中有且隻能有一個抽象方法,預設的方法、靜态的方法、私有方法也可以包含。
- 方法的參數必須是函數式接口,才能使用 Lambda 作為該接口的執行個體
1.4 常見的函數式接口
1.4.1 Supplier
該接口中有一個無參的抽象方法:T get()
它用來擷取一個泛型參數指定的資料類型的對象
1.4.2 Predicate
該接口中有一個無參的抽象方法:boolean test(T t),兩個預設方法:and() 、or()