這篇文章主要為大家介紹了關於java8學習教程之函數引用的使用,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習下。
前言
我們在上一篇文章中以實例講解如何定義和使用lambda 表達式,以及與其它語言相比, lambda 表達式在Java 中的特殊規格。並且提到,lambda 表達式可以進一步簡化為函數引用。
這篇文章將介紹如何使用函數引用,話不多說了,來一起看看詳細的介紹。
函數所引用的型別
函數參考分為以下四個:
靜態函數,例如Integer 類別的parseInt 函數,可以寫作
Integer::parseInt
物件層級函數的引用,例如String 類別的length 函數,可以寫作
String::length
具體實例的函數的引用,例如名稱為expensiveTransaction 的一個實例的getValue,寫作
expensiveTransaction::getValue
建構子的參考
#靜態函數
例如:
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);
可以寫作:
Function<String, Integer> stringToInteger = Integer::parseInt;
##可以寫物件層級函數的參考
BiPredicate<List<String>, String> contains = (list, element) -> list.contains(element);可以寫:
#
BiPredicate<List<String>, String> contains = List::contains;
建構子的引用
下面再舉一個建構子的例子, 先定義一個函數式接口,唯一的方法get 會傳回指定型別的物件。@FunctionalInterface public interface Supplier<T> { T get(); }
Supplier<TantanitReader> constructor = () -> new TantanitReader(); TantanitReader tantanitReader = constructor.get();上述程式碼的 lambda 表達式 new 並傳回一個新的對象,使得 constructor 變數成為一個建構器的參考。 等價於以下函數引用:
Supplier<TantanitReader> constructor2 = TantanitReader::new; TantanitReader tantanitReader2 = constructor2.get();以上的例子都是沒有參數的情況,以下仍以建構子為例,介紹有參數的情況:
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");這時由於函數只有一個參數,可以使用Java 自帶的Function這個函數式接口,它實際起作用的函數如下:
R apply(T t);作用為根據一個參數,傳回一個結果。我們由此可以使用 constructor4 以及對應的函數來引用 constructor5。
小結
使用函數引用不僅可以簡化lambda 表達式,而且在語意上可以更專注於方法名稱,也就是要做的事,抽象層次更加接近人類的認知。所以,應盡可能使用函數引用。總結#
以上是Java8中關於函數引用的使用方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),