java8學習教程之函數(shù)引用的使用方法
前言
我們在上一篇文章 中以實例講解如何定義和使用 lambda 表達式,以及與其它語言相比,lambda 表達式在 Java 中的特殊規(guī)范。并且提到,lambda 表達式可以進一步簡化為函數(shù)引用。
這篇文章將介紹如何使用函數(shù)引用,話不多說了,來一起看看詳細的介紹吧。
函數(shù)引用的類型
函數(shù)引用分為以下四種:
- 靜態(tài)函數(shù),比如 Integer 類的 parseInt 函數(shù),可以寫作
Integer::parseInt - 對象級別函數(shù)的引用,比如 String 類的 length 函數(shù),可以寫作
String::length - 具體實例的函數(shù)的引用,比如名稱為 expensiveTransaction 的一個實例的 getValue,寫作
expensiveTransaction::getValue - 構造函數(shù)的引用
靜態(tài)函數(shù)
比如:
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);
可以寫作:
Function<String, Integer> stringToInteger = Integer::parseInt;
對象級別函數(shù)的引用
BiPredicate<List<String>, String> contains = (list, element) -> list.contains(element);
可以寫作:
BiPredicate<List<String>, String> contains = List::contains;
構造函數(shù)的引用
下面再舉一個構造函數(shù)的例子, 首先定義一個函數(shù)式接口,唯一的方法 get 返回指定類型的對象。
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Supplier<TantanitReader> constructor = () -> new TantanitReader(); TantanitReader tantanitReader = constructor.get();
上述代碼的 lambda 表達式 new 并返回一個新的對象,使得 constructor 變量成為一個構造器的引用。
等價于以下函數(shù)引用:
Supplier<TantanitReader> constructor2 = TantanitReader::new; TantanitReader tantanitReader2 = constructor2.get();
以上的例子都是沒有參數(shù)的情況,下面仍然以構造函數(shù)為例,介紹有參數(shù)的情況:
public TantanitReader(String loginName) {
this.loginName = loginName;
}
Function<String,TantanitReader> constructor3 = (loginName) -> new TantanitReader(loginName);
TantanitReader tantanitReader3 = constructor3.apply("jack");
Function<String,TantanitReader> constructor4 = TantanitReader::new;
TantanitReader tantanitReader4 = constructor4.apply("jack");
TantanitReader tantanitReader5 = constructor4.apply("tom");
這時由于函數(shù)只有一個參數(shù),可以使用 Java 自帶的 Function這個函數(shù)式接口,它實際起作用的函數(shù)如下:
R apply(T t);
作用為根據一個參數(shù),返回一個結果。我們由此可以使用 constructor4 以及相應的函數(shù)引用 constructor5。
小結
使用函數(shù)引用不僅可以簡化 lambda 表達式,而且在語義上可以更加專注于方法名稱,也就是要做的事,抽象級別更加接近人類的認知。所以,應當盡可能使用函數(shù)引用。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
SpringBoot?ApplicationContext接口深入分析
ApplicationContext是Spring應用程序中的中央接口,由于繼承了多個組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊監(jiān)聽事件,加載資源文件等2022-11-11
Spring cloud alibaba之Ribbon負載均衡實現(xiàn)方案
Spring cloud Ribbon是基于Netflix Ribbon實現(xiàn)的一套客戶端的負載均衡工具,Ribbon客戶端提供一系列完善的配置,如超時、重試等,Ribbon也可以實現(xiàn)自己的負載均衡算法,感興趣的朋友跟隨小編一起看看吧2021-07-07
SpringBoot使用spring retry重試機制的操作詳解
實際工作中由于網絡波動等原因導致代碼執(zhí)行失敗需要重新執(zhí)行,保證最終能夠完成業(yè)務功能,通常來說,會用try/catch,while循環(huán)或者定時任務重處理,但是這樣的做法缺乏統(tǒng)一性,要多寫很多代碼,spring-retry組件可以通過注解優(yōu)雅的實現(xiàn)重處理功能2024-12-12
JAVA使用ElasticSearch查詢in和not in的實現(xiàn)方式
今天小編就為大家分享一篇關于JAVA使用Elasticsearch查詢in和not in的實現(xiàn)方式,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java后端Tomcat實現(xiàn)WebSocket實例教程
WebSocket protocol 是HTML5一種新的協(xié)議。它實現(xiàn)了瀏覽器與服務器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成握手。本文給大家介紹Java后端Tomcat實現(xiàn)WebSocket實例教程,感興趣的朋友一起學習吧2016-05-05

