摘要:表達式允許你直接以內(nèi)聯(lián)的形式為函數(shù)式接口的抽象方法提供實現(xiàn),并把整個表達式作為函數(shù)式接口的實例。如何使用接口,比如說如何挑選紅色蘋果為例說明蘋果過濾實現(xiàn)測試測試使用表達式定義蘋果過濾規(guī)則
什么是Lambda表達式
Lambda表達式可以理解為是一種匿名函數(shù):它沒有名稱,但有參數(shù)列表、函數(shù)主體、返回類型,可能還有一個可以拋出的異常的列表。
Lambda表達式語法(parameters) -> expression 或者 (parameters) -> {statements;}
1.布爾表達式
(Listlist) -> list.isEmpty()
2.創(chuàng)建對象
() -> new Apple("蘋果")
3.使用一個對象
(Apple a) -> {System.out.println(a.getName());}
4.比較兩個對象
(Apple a,Apple b) -> a.getName().compareTo(b.getName())那些地方可以使用Lambda 函數(shù)式接口
函數(shù)式接口就是只定義了一個抽象方法的接口;比如Java中的Comparator、Runnable、Callabel接口。含有多個 Extension Methods 的接口也屬于函數(shù)式接口。
1.Lambda表達式允許你直接以內(nèi)聯(lián)的形式為函數(shù)式接口的抽象方法提供實現(xiàn),并把整個表達式作為函數(shù)式接口的實例。你也可以使用匿名內(nèi)部類來完成同樣的事情,只不過比較麻煩。如下示例:
public static void main(String[] args) { /** * 利用Ruunable接口run方法打印數(shù)據(jù)。一個類,實現(xiàn)Runnable接口, * 這個類可以做很多事情,不僅僅只被用于線程,也可以用于其他功能! */ /*lambda表達式*/ Runnable run = () -> System.out.println("hello lambda"); /*匿名內(nèi)部類*/ Runnable run2 = new Runnable() { @Override public void run() { System.out.println("hello inner class"); } }; process(run); process(run2); } public static void process(Runnable runnable) { runnable.run(); }
通過代碼我們可以知道,Lambda表達式的簽名要和函數(shù)式接口的抽象方法簽名一致;
使用函數(shù)式接口在JDK1.8中你會發(fā)現(xiàn),函數(shù)式接口都帶有@FunctionalInterface注解,表示該接口是函數(shù)式接口,如果你用了該注解但接口又不是函數(shù)式接口,編譯器就會報錯。
在JDK1.6中我們常見的函數(shù)式接口有Comparator、Runnable、Callable等。在JDK1.8的java.util.function包中引入新的函數(shù)式接口,我們重點介紹一下泛型式函數(shù)接口Predicate、Consumer、Function。
1. Predicate接口定義了一個test抽象方法,它的作用就是判斷入?yún)⒌男袨楹湍骋阎膮?shù)行為是否匹配。除此之外,接口中還有 ```and```、```or```等默認方法。 @FunctionalInterface public interface Predicate{ boolean test(T t); }
如何使用Predicate接口,比如說如何挑選紅色蘋果為例說明
1.蘋果過濾實現(xiàn)
public class FilterApple { public staticList filterApple(List lists, Predicate p) { List result = new ArrayList<>(); for (T t : lists) { if (p.test(t)) { result.add(t); } } return result; } }
2.測試
/*測試*/ public static void main(String[] args) { Apple a = new Apple(); a.setColor("green"); Apple b = new Apple(); b.setColor("red"); Listlist = new ArrayList<>(); list.add(a); list.add(b); /*使用lambda表達式定義蘋果過濾規(guī)則*/ Predicate lambdaPredicate = (Apple apple) -> "red".equals(apple.getColor()); list = FilterApple.filterApple(list, lambdaPredicate); System.out.println(list.toString()); //[Apple(color=red, weight=0, area=null)] }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71516.html
摘要:利用前面所述的方法,這個例子可以用方法引用改寫成下面的樣子構(gòu)造函數(shù)引用對于一個現(xiàn)有構(gòu)造函數(shù),你可以利用它的名稱和關(guān)鍵字來創(chuàng)建它的一個引用。 第三章 Lambda表達式 函數(shù)式接口 函數(shù)式接口就是只定義一個抽象方法的接口,哪怕有很多默認方法,只要接口只定義了一個抽象方法,它就仍然是一個函數(shù)式接口。 常用函數(shù)式接口 showImg(https://segmentfault.com/img...
摘要:一個抽象類可以通過實例變量字段保存一個通用狀態(tài),而接口是不能有實例變量的。分組和分區(qū)分組多級分組分區(qū)是分組的特殊情況由一個謂詞返回一個布爾值的函數(shù)作為分類函數(shù),它稱分區(qū)函數(shù)。 一、基本概念 兩個新特性: 1、函數(shù)式編程簡化代碼復雜度(引入了Lambda表達式) 2、更高效的利用多核CPU 1、基本概念: 1、Lambda基本語法 (parameters) -> expression 對...
摘要:大家好,上一篇小樂給大家講述了樂字節(jié)核心特性表達式,點擊回顧。接下來繼續(xù)核心特性之函數(shù)式接口。感謝大家欣賞小樂帶來的核心特性之函數(shù)式接口,接下來還會更多核心技術(shù)講解,請關(guān)注樂字節(jié)如需要視頻課程,請搜索樂字節(jié)騰訊課堂 大家好,上一篇小樂給大家講述了《樂字節(jié)-Java8核心特性-Lambda表達式》,點擊回顧。接下來繼續(xù):Java8核心特性之函數(shù)式接口。 什么時候可以使用Lambda?通常...
摘要:理解內(nèi)存模型對多線程編程無疑是有好處的。干貨高級動畫高級動畫進階,矢量動畫。 這是最好的Android相關(guān)原創(chuàng)知識體系(100+篇) 知識體系從2016年開始構(gòu)建,所有的文章都是圍繞著這個知識體系來寫,目前共收入了100多篇原創(chuàng)文章,其中有一部分未收入的文章在我的新書《Android進階之光》中。最重要的是,這個知識體系仍舊在成長中。 Android 下拉刷新庫,這一個就夠了! 新鮮出...
閱讀 2580·2021-11-22 13:53
閱讀 4091·2021-09-28 09:47
閱讀 877·2021-09-22 15:33
閱讀 824·2020-12-03 17:17
閱讀 3322·2019-08-30 13:13
閱讀 2129·2019-08-29 16:09
閱讀 1184·2019-08-29 12:24
閱讀 2456·2019-08-28 18:14