Java Lambda表達(dá)式入門(mén)示例
本文實(shí)例講述了Java Lambda表達(dá)式。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
Lambda表達(dá)式支持將代碼塊作為方法參數(shù),Lambda表達(dá)式允許使用更簡(jiǎn)潔的代碼來(lái)創(chuàng)建只有一個(gè)抽象方法的接口(函數(shù)式接口)的實(shí)例。
Lambda表達(dá)式主要作用就是代替匿名內(nèi)部類(lèi)的繁瑣語(yǔ)法。
它由三部分組成:
- 形參列表。形參列表允許省略形參類(lèi)型。如果形參列表中只有一個(gè)參數(shù),甚至連形參列表的圓括號(hào)也可以省略。
- 箭頭(->),必須通過(guò)英文等號(hào)和大于符號(hào)組成。
- 代碼塊。如果代碼塊只有包含一條語(yǔ)句,Lambda表達(dá)式允許省略代碼塊的花括號(hào),如果省略了代碼塊的花括號(hào),這條語(yǔ)句不要用花括號(hào)表示語(yǔ)句結(jié)束。Lambda代碼塊只有一條return語(yǔ)句,甚至可以省略return關(guān)鍵字。Lambda表達(dá)式需要返回值,而它的代碼塊中僅有一條省略了return的語(yǔ)句,Lambda表達(dá)式會(huì)自動(dòng)返回這條語(yǔ)句的值。
二 用匿名內(nèi)部類(lèi)實(shí)現(xiàn)命令模式
1 代碼
Command接口
public interface Command { // 接口里定義的process()方法用于封裝“處理行為” void process(int[] target); }
ProcessArray類(lèi)
public class ProcessArray { public ProcessArray() { } public void process(int[] target, Command cmd) { cmd.process(target); } }
CommandTest類(lèi)
public class CommandTest { public CommandTest() { } public static void main(String[] args) { ProcessArray pa = new ProcessArray(); int[] array = new int[]{3, -4, 6, 4}; pa.process(array, new Command() { public void process(int[] target) { int sum = 0; int[] var3 = target; int var4 = target.length; for(int var5 = 0; var5 < var4; ++var5) { int tmp = var3[var5]; sum += tmp; } System.out.println("數(shù)組元素的總和是:" + sum); } }); } }
2 運(yùn)行
數(shù)組元素的總和是:9
三 用Lambda表達(dá)式實(shí)現(xiàn)命令模式
1 代碼
public class CommandTest2 { public static void main(String[] args) { ProcessArray pa = new ProcessArray(); int[] array = {3, -4, 6, 4}; // 處理數(shù)組,具體處理行為取決于匿名內(nèi)部類(lèi) pa.process(array , (int[] target)->{ int sum = 0; for (int tmp : target ) { sum += tmp; } System.out.println("數(shù)組元素的總和是:" + sum); }); } }
2 運(yùn)行
數(shù)組元素的總和是:9
四 比較
Lambda表達(dá)式與匿名內(nèi)部類(lèi)比較,不需要new XXX(){}這種繁瑣的代碼,不需要指出重寫(xiě)方法名字,不需要給出重寫(xiě)方法的返回值類(lèi)型,只要給出重寫(xiě)的方法括號(hào)以及括號(hào)里的形參列表即可。
Lambda表達(dá)式的代碼塊會(huì)代替實(shí)現(xiàn)方法的方法體,Lambda表達(dá)式就相對(duì)于一個(gè)匿名方法。
五 Lambda表達(dá)式的簡(jiǎn)化寫(xiě)法
1 代碼
interface Eatable { void taste(); } interface Flyable { void fly(String weather); } interface Addable { int add(int a , int b); } public class LambdaQs { // 調(diào)用該方法需要Eatable對(duì)象 public void eat(Eatable e) { System.out.println(e); e.taste(); } // 調(diào)用該方法需要Flyable對(duì)象 public void drive(Flyable f) { System.out.println("我正在駕駛:" + f); f.fly("【碧空如洗的晴日】"); } // 調(diào)用該方法需要Addable對(duì)象 public void test(Addable add) { System.out.println("5與3的和為:" + add.add(5, 3)); } public static void main(String[] args) { LambdaQs lq = new LambdaQs(); // Lambda表達(dá)式的代碼塊只有一條語(yǔ)句,可以省略花括號(hào)。 lq.eat(()-> System.out.println("蘋(píng)果的味道不錯(cuò)!")); // Lambda表達(dá)式的形參列表只有一個(gè)形參,省略圓括號(hào) lq.drive(weather -> { System.out.println("今天天氣是:" + weather); System.out.println("直升機(jī)飛行平穩(wěn)"); }); // Lambda表達(dá)式的代碼塊只有一條語(yǔ)句,省略花括號(hào) // 代碼塊中只有一條語(yǔ)句,即使該表達(dá)式需要返回值,也可以省略return關(guān)鍵字。 lq.test((a , b)->a + b); } }
2 運(yùn)行
LambdaQs$$Lambda$1/1078694789@3d075dc0
蘋(píng)果的味道不錯(cuò)!
我正在駕駛:LambdaQs$$Lambda$2/1149319664@7cca494b
今天天氣是:【碧空如洗的晴日】
直升機(jī)飛行平穩(wěn)
5與3的和為:8
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java8簡(jiǎn)單了解Lambda表達(dá)式與函數(shù)式接口
- 淺析Java8新特性L(fǎng)ambda表達(dá)式和函數(shù)式接口
- Java編程中使用lambda表達(dá)式的奇技淫巧
- Java8新特性lambda表達(dá)式有什么用(用法實(shí)例)
- Java8新特性之Lambda表達(dá)式淺析
- Java8新特性L(fǎng)ambda表達(dá)式的一些復(fù)雜用法總結(jié)
- Java 8 動(dòng)態(tài)類(lèi)型語(yǔ)言L(fǎng)ambda表達(dá)式實(shí)現(xiàn)原理解析
- 深入理解Java中的Lambda表達(dá)式
- Java 8 Function函數(shù)式接口及函數(shù)式接口實(shí)例
- 實(shí)例詳解Java8函數(shù)式接口
- Java 8新特性 內(nèi)建函數(shù)式接口詳解
- Java Lambda表達(dá)式和函數(shù)式接口實(shí)例分析
相關(guān)文章
Java實(shí)現(xiàn)支付寶之第三方支付寶即時(shí)到賬支付功能
這篇文章主要介紹了Java實(shí)現(xiàn)支付寶之第三方支付寶即時(shí)到賬支付功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07Spring 應(yīng)用上下文獲取 Bean 的常用姿勢(shì)實(shí)例總結(jié)
這篇文章主要介紹了Spring 應(yīng)用上下文獲取 Bean,結(jié)合實(shí)例形式總結(jié)分析了Spring 應(yīng)用上下文獲取 Bean的實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05使用MyBatis攔截器實(shí)現(xiàn)sql查詢(xún)權(quán)限動(dòng)態(tài)修改代碼實(shí)例
這篇文章主要介紹了使用MyBatis攔截器實(shí)現(xiàn)sql查詢(xún)權(quán)限動(dòng)態(tài)修改代碼實(shí)例,為了不耦合,現(xiàn)在的方案是在需要鑒權(quán)的Mybatis?Mapper方法上增加一個(gè)注解,在運(yùn)行過(guò)程中判斷該注解存在即對(duì)sql進(jìn)行修改,需要的朋友可以參考下2023-08-08springboot 基于Tomcat容器的自啟動(dòng)流程分析
這篇文章主要介紹了springboot 基于Tomcat容器的自啟動(dòng)流程分析,Spring通過(guò)注解導(dǎo)入Bean大體可分為四種方式,我們主要來(lái)說(shuō)Import的兩種實(shí)現(xiàn)方法,需要的朋友可以參考下2020-02-02springboot中swagger、異步/定時(shí)/郵件任務(wù)的問(wèn)題
這篇文章主要介紹了springboot中swagger、異步/定時(shí)/郵件任務(wù)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07使用SkyWalking監(jiān)控Java服務(wù)的過(guò)程
這篇文章主要介紹了使用SkyWalking監(jiān)控Java服務(wù),介紹一個(gè)對(duì)源碼0入侵的Java服務(wù)監(jiān)控方式,SkyWalking Agent,只需要啟動(dòng)Java程序的時(shí)候加幾個(gè)參數(shù),就能對(duì)Java服務(wù)進(jìn)行可視化監(jiān)控,需要的朋友可以參考下2023-08-085種必會(huì)的Java異步調(diào)用轉(zhuǎn)同步的方法你會(huì)幾種
這篇文章主要介紹了5種必會(huì)的Java異步調(diào)用轉(zhuǎn)同步的方法你會(huì)幾種,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12詳解Java動(dòng)態(tài)代理的實(shí)現(xiàn)及應(yīng)用
這篇文章主要介紹了詳解Java動(dòng)態(tài)代理的實(shí)現(xiàn)及應(yīng)用的相關(guān)資料,希望通過(guò)本文大家能理解掌握J(rèn)ava動(dòng)態(tài)代理的使用方法,需要的朋友可以參考下2017-09-09多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案
這篇文章主要介紹了多模塊項(xiàng)目引入SpringSecurity后一直報(bào)404的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06