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

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

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

 [[316323]]

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

一、什么是方法引用

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

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

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

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

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

所以我們來總結(jié):方法引用是一個(gè)更加緊湊,易讀的 Lambda 表達(dá)式,注意方法引用是一個(gè) Lambda 表達(dá)式,其中方法引用的操作符是雙冒號(hào) "::"。

二、舉例演示

1、我們首先定義一個(gè)User類

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

現(xiàn)在有一個(gè)功能,那就是需要按照年齡,對(duì)Person進(jìn)行排序。

2、Lambda表達(dá)式寫法

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

我們使用lambda表達(dá)式可以直接進(jìn)行比較。現(xiàn)在我們使用方法引用。

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

這下子代碼是不是更加的簡(jiǎn)潔了。我們相當(dāng)于把lambda表達(dá)式進(jìn)行了改變。下面我們就來好好地講解一下方法引用是如何使用的。

三、方法引用分類

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

(1)對(duì)象引用::實(shí)例方法名

(2)類名::靜態(tài)方法名

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

(4)類名::new

(5)類型[]::new

我們對(duì)這5種方式分別來敘述。

1、對(duì)象引用::實(shí)例方法名

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

我們創(chuàng)建了一個(gè)PersonCompare對(duì)象,調(diào)用了其內(nèi)部的compareByName實(shí)例方法。

2、類名::靜態(tài)方法名

舉幾個(gè)例子:

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

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

Person::compareByAge 就是一個(gè)靜態(tài)方法引用,也是前面我們舉得例子。

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

Math是一個(gè)類而abs為該類的靜態(tài)方法。Function中的唯一抽象方法apply方法參數(shù)列表與abs方法的參數(shù)列表相同,都是接收一個(gè)Long類型參數(shù)。

3、類名::實(shí)例方法名

若Lambda表達(dá)式的參數(shù)列表的第一個(gè)參數(shù),是實(shí)例方法的調(diào)用者,第二個(gè)參數(shù)(或無參)是實(shí)例方法的參數(shù)時(shí),就可以使用這種方法:

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

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

4、類名::new

在引用構(gòu)造器的時(shí)候,構(gòu)造器參數(shù)列表要與接口中抽象方法的參數(shù)列表一致。對(duì)應(yīng)的 Lambda:() -> new String()。

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

上面這段代碼的功能就是使用PersonFactory工廠,然后使用Person::new創(chuàng)建一個(gè)Person實(shí)例。

5、類型[]::new

引用數(shù)組和引用構(gòu)造器很像,格式為 類型[]::new,等價(jià)于 lambda 表達(dá)式 x -> new int[x]。其中類型可以為基本類型也可以是類。

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

OK。方法引用就是這么簡(jiǎn)單。

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2021-02-02 13:23:47

Python語言線程

2021-12-19 22:48:53

JavaScript開發(fā)代碼

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開發(fā)

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編程語言軟件開發(fā)

2013-12-30 10:06:51

智能硬件3D打印互聯(lián)網(wǎng)化

2016-08-01 11:33:40

云遷移云安全合規(guī)性

2024-03-08 12:20:25

Python代碼庫(kù)

2011-09-28 10:05:42

Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲毛片在线 | 国产日韩欧美激情 | 亚洲精品国产电影 | 99热都是精品 | 91传媒在线观看 | 精品国产18久久久久久二百 | 最新中文字幕在线 | 欧美激情视频一区二区三区在线播放 | 国产精品国产精品国产专区不蜜 | 亚洲品质自拍视频网站 | 亚洲视频在线观看 | 国产在线观看一区二区三区 | 国产午夜在线观看 | 剑来高清在线观看 | 阿v视频在线观看 | 中文字幕乱码一区二区三区 | 国产精品a一区二区三区网址 | 男女视频免费 | 精品毛片 | va在线 | 亚洲精品乱码久久久久久久久久 | 欧美久久视频 | 午夜久久av| 国产精品日韩一区二区 | 亚洲一区二区三区免费观看 | 精品一区在线 | 一区二区国产精品 | 国产一区二区三区久久 | 99久久精品免费看国产高清 | 成人网在线看 | 国产999精品久久久 午夜天堂精品久久久久 | 国内成人免费视频 | 7799精品视频天天看 | 欧美一级免费片 | 一区二区三区四区在线视频 | 91中文字幕在线 | 欧美女优在线观看 | www.青青草| 国产激情片在线观看 | 成人福利网站 | 日韩三级在线 |