成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 8的方法引用詳解(讓你的代碼看起來高大上)

新聞
基于Lambda表達式來敘述的。主要講解方法引用。

 [[316323]]

在上一篇文章中曾經介紹到了java8中的Lambda表達式,這篇文章是基于Lambda表達式來敘述的。主要講解方法引用。在此之前還希望你能夠了解一下函數式接口的使用。

一、什么是方法引用

在Lambda表達式中,將其劃分了幾塊。這一行就是lambda表達式。() -> System.out.println("使用Lambda表達式");下面我們對lambda的格式進行一個介紹:

(1)左邊括號:lambda的形參列表,就好比是我們定義一個接口,里面有一個抽象方法,這個抽象方法的形參列表。

(2)箭頭:lambda的操作符,所以你看見這個箭頭心中知道這是一個lambda表達式就可以了。

(3)右邊lambda體:就好比是我們實現了接口中的抽象方法。

在最后一塊中,有時候,lambda體可能僅僅調用一個已存在的方法,而不做任何其它事,對于這種情況,通過一個方法名字來引用這個已存在的方法會更加清晰。

所以我們來總結:方法引用是一個更加緊湊,易讀的 Lambda 表達式,注意方法引用是一個 Lambda 表達式,其中方法引用的操作符是雙冒號 "::"。

二、舉例演示

1、我們首先定義一個User類

java8的方法引用詳解(讓你的代碼看起來高大上)

現在有一個功能,那就是需要按照年齡,對Person進行排序。

2、Lambda表達式寫法

java8的方法引用詳解(讓你的代碼看起來高大上)

我們使用lambda表達式可以直接進行比較。現在我們使用方法引用。

java8的方法引用詳解(讓你的代碼看起來高大上)

這下子代碼是不是更加的簡潔了。我們相當于把lambda表達式進行了改變。下面我們就來好好地講解一下方法引用是如何使用的。

三、方法引用分類

先來說一下方法引用使用到的操作符“::”,這個操作符把方法引用分成兩邊,左邊是類名或者某個對象的引用,右邊是方法名。引用方法有下面幾種方式:

(1)對象引用::實例方法名

(2)類名::靜態方法名

(3)類名::實例方法名

(4)類名::new

(5)類型[]::new

我們對這5種方式分別來敘述。

1、對象引用::實例方法名

java8的方法引用詳解(讓你的代碼看起來高大上)

我們創建了一個PersonCompare對象,調用了其內部的compareByName實例方法。

2、類名::靜態方法名

舉幾個例子:

String::valueOf,等價于 Lambda:s -> String.valueOf(s)

Math::pow 等價于lambda表達式 (x, y) -> Math.pow(x, y);

Person::compareByAge 就是一個靜態方法引用,也是前面我們舉得例子。

Function<Long, Long> f = Math::abs;
Long result = f.apply(-3L);123

Math是一個類而abs為該類的靜態方法。Function中的唯一抽象方法apply方法參數列表與abs方法的參數列表相同,都是接收一個Long類型參數。

3、類名::實例方法名

若Lambda表達式的參數列表的第一個參數,是實例方法的調用者,第二個參數(或無參)是實例方法的參數時,就可以使用這種方法:

BiPredicate<String, String> b = String::equals;
b.test("abc", "abcd");

String是一個類而equals為該類的定義的實例方法。BiPredicate中的唯一抽象方法test方法參數列表與equals方法的參數列表相同,都是接收兩個String類型參數。

4、類名::new

在引用構造器的時候,構造器參數列表要與接口中抽象方法的參數列表一致。對應的 Lambda:() -> new String()。

java8的方法引用詳解(讓你的代碼看起來高大上)

上面這段代碼的功能就是使用PersonFactory工廠,然后使用Person::new創建一個Person實例。

5、類型[]::new

引用數組和引用構造器很像,格式為 類型[]::new,等價于 lambda 表達式 x -> new int[x]。其中類型可以為基本類型也可以是類。

java8的方法引用詳解(讓你的代碼看起來高大上)

OK。方法引用就是這么簡單。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-02-02 13:23:47

Python語言線程

2021-12-19 22:48:53

JavaScript開發代碼

2024-09-13 16:19:47

2022-02-28 12:57:09

GNOMEPlasma桌面

2024-08-27 15:25:33

2023-07-11 15:43:16

JavaScript技巧

2022-02-21 12:05:49

LibreOffiLinux工具欄

2023-08-01 14:36:00

JavaScript開發

2022-09-26 12:53:54

JavaScrip單行代碼

2025-02-18 11:01:49

2023-06-27 23:57:06

JavaScrip技能

2022-11-09 15:36:11

Javascript技巧代碼

2025-03-17 10:42:12

2014-11-07 10:26:05

2023-08-29 08:01:39

2021-10-02 10:36:00

YAML編程語言軟件開發

2013-12-30 10:06:51

智能硬件3D打印互聯網化

2016-08-01 11:33:40

云遷移云安全合規性

2020-06-29 15:00:31

UbuntumacOSLinux

2024-03-08 12:20:25

Python代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91不卡在线| 欧美一区二区另类 | 久久一热 | 天天躁日日躁狠狠很躁 | 国产精品美女久久久av超清 | 国产精品2 | 国产精品美女久久久久aⅴ国产馆 | 日本不卡一区二区三区 | 欧美一区二区三区在线观看 | 欧美一级黑人aaaaaaa做受 | 国产一级毛片视频 | www.黄色在线观看 | 国产视频黄色 | 影音先锋中文在线 | 黄色免费av | 日韩高清一区 | 91伊人网| 色啪网 | 午夜精品一区二区三区在线 | 日韩欧美在线观看视频 | 欧美h视频| 天堂色网 | av在线播放网站 | 国产主播第一页 | 国产精品一区二区不卡 | 狠狠av| 日韩a在线 | 性色在线 | 成人日b视频 | 国产欧美日韩在线一区 | 欧美11一13sex性hd | 亚洲在线一区二区 | 亚洲国产一区二区三区 | 在线观看国产三级 | 日本久久久一区二区三区 | 日韩一区中文字幕 | 偷牌自拍 | 国产精品久久久久久久久久免费看 | 一区二区三区免费网站 | 国产成人精品一区二区三区网站观看 | 久久久999国产精品 中文字幕在线精品 |