Java Lambda表達式的方法引用和構造器引用實例分析
本文實例講述了Java Lambda表達式的方法引用和構造器引用。分享給大家供大家參考,具體如下:
一 點睛
如果Lambda表達式的代碼塊只有一條代碼,還可以在代碼塊中使用方法引用和構造器引用,以使得Lambda表達式更加簡潔。
種類 |
示例 |
說明 |
對應的Lambda表達式 |
引用類方法 |
類名::類方法 |
函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該類方法作為參數(shù)。 |
(a,b,...) -> 類名.類方法(a,b, ...) |
引用特定對象的實例方法 |
特定對象::實例方法 |
函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該方法作為參數(shù)。 |
(a,b, ...) -> 特定對象.實例方法(a,b, ...) |
引用某類對象的實例方法 |
類名::實例方法 |
函數(shù)式接口中被實現(xiàn)方法的第一個參數(shù)作為調(diào)用者,后面的參數(shù)全部傳給該方法作為參數(shù)。 |
(a,b, ...) ->a.實例方法(b, ...) |
引用構造器 |
類名::new |
函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該構造器作為參數(shù)。 |
(a,b, ...) ->new 類名(a,b, ...) |
二 實戰(zhàn)
1 代碼
import javax.swing.*; @FunctionalInterface interface Converter{ Integer convert(String from); } @FunctionalInterface interface MyTest { String test(String a , int b , int c); } @FunctionalInterface interface YourTest { JFrame win(String title); } public class MethodRefer { public static void main(String[] args) { // 下面代碼使用Lambda表達式創(chuàng)建Converter對象 // Converter converter1 = from -> Integer.valueOf(from); // 方法引用代替Lambda表達式:引用類方法。 // 函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該類方法作為參數(shù)。 Converter converter1 = Integer::valueOf; Integer val = converter1.convert("99"); System.out.println(val); // 輸出整數(shù)99 // 下面代碼使用Lambda表達式創(chuàng)建Converter對象 // Converter converter2 = from -> "fkit.org".indexOf(from); // 方法引用代替Lambda表達式:引用特定對象的實例方法。 // 函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該方法作為參數(shù)。 Converter converter2 = "fkit.org"::indexOf; Integer value = converter2.convert("it"); System.out.println(value); // 輸出2 // 下面代碼使用Lambda表達式創(chuàng)建MyTest對象 // MyTest mt = (a , b , c) -> a.substring(b , c); // 方法引用代替Lambda表達式:引用某類對象的實例方法。 // 函數(shù)式接口中被實現(xiàn)方法的第一個參數(shù)作為調(diào)用者, // 后面的參數(shù)全部傳給該方法作為參數(shù)。 MyTest mt = String::substring; String str = mt.test("Java I Love you" , 2 , 9); System.out.println(str); // 輸出:va I Lo // 下面代碼使用Lambda表達式創(chuàng)建YourTest對象 // YourTest yt = (String a) -> new JFrame(a); // 構造器引用代替Lambda表達式。 // 函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該構造器作為參數(shù)。 YourTest yt = JFrame::new; JFrame jf = yt.win("我的窗口"); System.out.println(jf); } }
2 運行
99
2
va I Lo
javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=我的窗口,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
更多java相關內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O計入門與進階教程》、《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
spring boot 使用Aop通知打印控制器請求報文和返回報文問題
這篇文章主要介紹了spring-boot 使用Aop通知打印控制器請求報文和返回報文,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-04-04詳解Spring中實現(xiàn)接口動態(tài)的解決方法
最近在工作遇到的一個,發(fā)現(xiàn)網(wǎng)上的資料較少,所以想著總結分享下,下面這篇文章主要給大家介紹了關于Spring中實現(xiàn)接口動態(tài)的解決方法,文中通過完整的示例代碼給大家介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。2017-07-07關于Linux服務器配置java環(huán)境遇到的問題小結
這篇文章主要介紹了關于Linux服務器配置java環(huán)境遇到的問題小結,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12