Java中對Lambda表達式的理解,來測試學習一下
閒聊:
JDK8出來已經很久了,剛出來的時候稍微了解了一下,後面就丟棄了,現在重新拾取。雖然現在JDK11了。
本文將以持續更新模式進行。
正文:
直接看程式碼,在java8新特性裡,我們可以這樣寫:
public static void main(String[] args) { Supplier<Integer> supplier = ()->1; Consumer<String> consumer = (a)-> System.out.println(a); System.out.println(supplier.get()); consumer.accept("test"); }
輸出:
1 test Process finished with exit code 0
很洋氣。如此簡潔的程式碼,你行嗎,對就是說的你java7
先盜一張圖過來,說明一下Lambda
也就是說, Lambda表達式,創建了一個對應介面的實現,然後賦值給變數,是不是利用編譯器?查看編譯後的程式碼如下:
public static void main(String[] args) { Supplier<Integer> supplier = () -> { return 1; }; Consumer<String> consumer = (a) -> { System.out.println(a); }; System.out.println(supplier.get()); consumer.accept("test"); }
編譯器並沒有做這個功能,那就可能是JVM實作了Lambda的功能,後期再深入了解一下。標記1
寫到這裡,可以知道Lambda表達式減少了程式碼量,在java8之前只能用匿名內部類別或建立一個類別實作該介面實作該功能。如下
Supplier<Integer> supplier = new Supplier<Integer>() { @Override public Integer get() { return 1; } };
實際上,我比較好奇伴隨Lambda的接口,打開源碼可以看到
@FunctionalInterface public interface Supplier<T> { /** * Gets a result. * * @return a result */ T get(); }
对应的接口都添加了注解FunctionalInterface,那么不要这个注解是否能实现Lambda表达式,我做了一些测试,发现不需要注解也可以实现,目前来看注解只有两个功能 1、表示这个接口是函数式接口 2、帮助编译器识别,接口不能有多个方法。 在有多个方法的时候会提示Multiple non-overriding abstract methods found in interface
現在我們可以透過FunctionalInterface來查找在JDK8裡面有哪些接口是函數式接口
我從裡面選一兩個比較熱門的來測試,學習
#哦,先打斷一下剛看文章看到一段很重要的話(在實務中,函數式介面非常脆弱:只要某個開發者在該介面中加入一個函數,則該介面就不再是函數式介面進而導致編譯失敗。為了克服這種程式碼層面的脆弱性,並明確說明某個接口是函數式接口,Java 8 提供了一個特殊的註解)
我選的是ArrayList和Optional兩個類,都是很常用的類。
相關文章:
#相關影片:
#
以上是Java中對Lambda表達式的理解,來測試學習一下的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
