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