天天看點

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

Function接口,函數式接口

按入參傳回值分類,大概分為4種類型,再加上多個入參就又多了Bi開頭的兩種。

有Ctrl+P的時候不懂參數清單該寫啥,就先Ctrl+ALT看下入參類型的相關實作類!

一些實用的快捷鍵:Ctrl + P看參數清單,Ctrl + Q 看接口文檔

一些單詞:匿名的 anonymous; 二進制的:binary

書籍推薦:java8函數式程式設計

文章目錄

    • 你是否很好奇函數式程式設計的傳參到底要怎麼傳,接收傳回值到底要用什麼類型接收???
      • Stream流最常見的應用場景
      • java函數式接口印象
      • 看到一個陌生的參數清單要怎麼傳參
      • 匿名内部類和Lambda表達式的轉化
      • Function接口的入參和傳回值
      • demo
      • 其他有意義的問題

你是否很好奇函數式程式設計的傳參到底要怎麼傳,接收傳回值到底要用什麼類型接收???

Stream流最常見的應用場景

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

java函數式接口印象

  • 消費型 Consumer (有入參,無傳回值)
  • 提供者型 Supplier (無入參,有傳回值)
  • 常見型 Function(有入參,有傳回值)

上述類型的入參都是單個入參的。像BiConsumer, BiFunction這種的入參是多個入參

Bi 可以 了解為 binary,二進制的,兩個的

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

看到一個陌生的參數清單要怎麼傳參

檢視入參的實作類

(當時Ctrl+P檢視接口的參數清單時,看到BinaryOperator是入參實在不知道要傳啥參數。後來查Ctrl+alt看了BinaryOperator的實作類,才發現它可以傳BIgDecimal::sum這種。其實在reduce方法處按下Ctrl+Q是可以檢視jdk的接口文檔的,裡面有詳細的使用案例)

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

匿名内部類和Lambda表達式的轉化

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA
工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

利用IDE實作轉換:

滑鼠停在->附近按下alt+enter可以看到idea的提示,可以快捷地實作lambda表達式到匿名内部類寫法的互轉

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA
工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

Function接口的入參和傳回值

工具技巧和讀文檔 | 讀函數式程式設計接口文檔 | 匿名内部類 | lambda表達式 |IDEA

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的并行流使用