Function接口,函數式接口
按入參傳回值分類,大概分為4種類型,再加上多個入參就又多了Bi開頭的兩種。
有Ctrl+P的時候不懂參數清單該寫啥,就先Ctrl+ALT看下入參類型的相關實作類!
一些實用的快捷鍵:Ctrl + P看參數清單,Ctrl + Q 看接口文檔
一些單詞:匿名的 anonymous; 二進制的:binary
書籍推薦:java8函數式程式設計
文章目錄
-
- 你是否很好奇函數式程式設計的傳參到底要怎麼傳,接收傳回值到底要用什麼類型接收???
-
- Stream流最常見的應用場景
- java函數式接口印象
- 看到一個陌生的參數清單要怎麼傳參
- 匿名内部類和Lambda表達式的轉化
- Function接口的入參和傳回值
- demo
- 其他有意義的問題
你是否很好奇函數式程式設計的傳參到底要怎麼傳,接收傳回值到底要用什麼類型接收???
Stream流最常見的應用場景

java函數式接口印象
- 消費型 Consumer (有入參,無傳回值)
- 提供者型 Supplier (無入參,有傳回值)
- 常見型 Function(有入參,有傳回值)
上述類型的入參都是單個入參的。像BiConsumer, BiFunction這種的入參是多個入參
Bi 可以 了解為 binary,二進制的,兩個的
看到一個陌生的參數清單要怎麼傳參
檢視入參的實作類
(當時Ctrl+P檢視接口的參數清單時,看到BinaryOperator是入參實在不知道要傳啥參數。後來查Ctrl+alt看了BinaryOperator的實作類,才發現它可以傳BIgDecimal::sum這種。其實在reduce方法處按下Ctrl+Q是可以檢視jdk的接口文檔的,裡面有詳細的使用案例)
匿名内部類和Lambda表達式的轉化
利用IDE實作轉換:
滑鼠停在->附近按下alt+enter可以看到idea的提示,可以快捷地實作lambda表達式到匿名内部類寫法的互轉
Function接口的入參和傳回值
demo
// Lambda表達式寫法1
Stream<String> stringStream = list.stream().map(CallaboratorParamsInfo::getMerchantCode);
// Lambda表達式寫法2
Stream<String> stringStream = list.stream().map(callaboratorParamsInfo -> callaboratorParamsInfo.getMerchantCode());
// 匿名内部類寫法
Stream<String> stringStream = list.stream().map(new Function<CallaboratorParamsInfo, String>() {
@Override
public String apply(CallaboratorParamsInfo callaboratorParamsInfo) {
return callaboratorParamsInfo.getMerchantCode();
}
});
其他有意義的問題
- default方法
- 如何自定義一個函數式接口
- stream的并行流使用