精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

「lambda表達式」函數式接口、方法引用與構造器引用

開發 前端
Java 有一個限制,無法構造泛型類型 T 的數組。數組構造器引用對于克服這個限制很有用。表達式 new T[n] 會產生錯誤,因為這會改為 new Object[n] 。

函數式接口

Java 中已經有很多封裝代碼塊的接口,如 ActionListener 或 Comparator。 lambda 表達式與這些接口是兼容的。對于只有一個抽象方法的接口, 需要這種接口的對象時, 就可以提供一個 lambda 表達式。這種接口稱為函數式接口( functional interface ) 。

為什么函數式接口必須有一個抽象方法。不是接口中的所有方法都是抽象的嗎? 實際上,接口完全有可能重新聲明 Object 類的方法, 如 toString 或 clone, 這些聲明有可能會讓方法不再是抽象的。( Java API 中的一些接口會重新聲明 Object 方法 來附加 javadoc 注釋。Comparator API 就是這樣一個例子。)更重要的是, 正如 6.1.5 節所述, 在 JavaSE 8 中, 接口可以聲明非抽象方法。

最好把 lambda 表達式看作是一 個函數,而不是一個對象, 另外要接受 lambda 表達式可以傳遞到函數式接口。 lambda 表達式可以轉換為接口, 這一點讓 lambda 表達式很有吸引力。具體的語法很簡短。

實際上,在 Java 中, 對 lambda 表達式所能做的也只是能轉換為函數式接口。在其他支持函數字面量的程序設計語言中,可以聲明函數類型(如(String, String) -> int) 、 聲明這些類型的變量,還可以使用變量保存函數表達式。不過,Java 設計者還是決定保持我們熟悉的接口概念, 沒有為 Java 語言增加函數類型。

甚至不能把 lambda 表達式賦值給類型為 Object 的變量,Object 不是一個函數式接口。

Java API 在 java.util.function 包中定義了很多非常通用的函數式接口。其中一個接口 BiFunction<T,U,R> 描述了參數類型為 T 和 U 而且返回類型為 R 的函數。可以把我們的字符串比較 lambda 表達式保存在這個類型的變量中:

BiFunction<String,String,Integer> comp = (first,second) -> first.length() - second.length();

類似 Comparator 的接口往往有一個特定的用途, 而不只是提供一個有指定參數和返回類型的方法。Java SE 8 沿襲了這種思路。想要用 lambda 表達式做某些處理,還是要謹記表達式的用途,為它建立一個特定的函數式接口。

java.util.function 包中有一個尤其有用的接口 Predicate:

public interface Predicate<T>
{
boolean test(T t);
// Additional default and static methods
}

ArrayList 類有一個 removelf 方法, 它的參數就是一個 Predicate 。這個接口專門用來傳遞 lambda 表達式。例如,下面的語句將從一個數組列表刪除所有 null 值: list.removelf(e -> e == null);

方法引用

有時, 可能已經有現成的方法可以完成你想要傳遞到其他代碼的某個動作。例如,假設你希望只要出現一個定時器事件就打印這個事件對象。 當然,為此也可以調用:

Timer t = new Timer(1000, event -> System.out .println(event)):

但是,如果直接把 println 方法傳遞到 Timer 構造器就更好了。具體做法如下:

Timer t = new Timer(1000, System.out::println);

表達式 System.out::println 是一個方法引用( method reference ), 它等價于 lambda 表達式

x -> System.out.println(x) 。

再來看一個例子,假設你想對字符串排序,而不考慮字母的大小寫。可以傳遞以下方法表達式:

Arrays.sort(strings , String::compareToIgnoreCase)

從這些例子可以看出, 要用 :: 操作符分隔方法名與對象或類名。主要有 3 種情況:

  • object::instanceMethod
  • Class::staticMethod
  • Class::instanceMethod

在前 2 種情況中,方法引用等價于提供方法參數的 lambda 表達式。前面已經提到的,System.out::println等價于 x -> System.out.println(x) 。類似地,Math::pow 等價于(x , y) -> Math.pow(x , y)。

對于第 3 種情況, 第 1 個參數會成為方法的目標。例如,
String::compareToIgnoreCase 等同于 (x, y) -> x.compareToIgnoreCase(y) 。

如果有多個同名的重栽方法, 編譯器就會嘗試從上下文中找出你指的那一個方法。 例如, Math.max 方法有兩個版本, 一個用于整數, 另一個用于 double 值。選擇哪一個版本取決于 Math::max 轉換為哪個函數式接口的方法參數。 類似于 lambda 表達式,方法引用不能獨立存在,總是會轉換為函數式接口的實例。

可以在方法引用中使用 this 參數。例如,this::equals 等同于 x -> this.equals(x) 。 使用 super 也是合法的。 下面的方法表達式:

super::instanceMethod

使用 this 作為目標,會調用給定方法的超類版本。

class Greeter{
public void greet(){
System.out.println("Hello, world!");
}
}
class TimedGreeter extends Greeter{
public void greet(){
Timer t = new Timer(1000, super::greet);
t.start();
}
}

TimedGreeter.greet 方法開始執行時,會構造一個 Timer, 它會在每次定時器滴答時執行 super::greet 方法。這個方法會調用超類的 greet 方法。

構造器引用

構造器引用與方法引用很類似,只不過方法名為 new 。例如,Person::new 是 Person 構造器的一個引用。哪一個構造器呢? 這取決于上下文。假設你有一個字符串列表。可以把它轉換為一個 Person 對象數組,為此要在各個字符串上調用構造器,調用如下:

ArrayList names = . . .; 
Stream stream = names.stream().map(Person::new);
List people = stream.collect(Collectors.toList());

map 方法會為各個列表元素調用 Person(String) 構造器。如果有多個 Person 構造器, 編譯器會選擇有一個 String 參數的構造器, 因為它從上下文推導出這是在對一個字符串調用構造器。

可以用數組類型建立構造器引用。例如, int[]::new 是一個構造器引用,它有一個參數: 即數組的長度。這等價于 lambda 表達式 x -> new int[x] ;

Java 有一個限制,無法構造泛型類型 T 的數組。數組構造器引用對于克服這個限制很有用。表達式 new T[n] 會產生錯誤,因為這會改為 new Object[n] 。 對于開發類庫的人來說,這是一個問題。例如,假設我們需要一個 Person 對象數組。Stream 接口有一個 toArray 方法可以返回 Object 數組:

Object[] people = stream.toArray();

不過,這并不讓人滿意。用戶希望得到一個 Person 引用數組,而不是 Object 引用數組。 流庫利用構造器引用解決了這個問題。可以把 Person[]::new 傳入 toArray 方法:

Person[] people = stream.toArray(Person[]::new);

toArray 方法調用這個構造器來得到一個正確類型的數組。然后填充這個數組并返回。

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

2022-12-05 09:31:51

接口lambda表達式

2024-03-08 09:45:21

Lambda表達式Stream

2024-12-02 10:56:29

2021-08-31 07:19:41

Lambda表達式C#

2009-08-10 10:06:10

.NET Lambda

2009-08-31 17:11:37

Lambda表達式

2020-10-16 10:07:03

Lambda表達式Java8

2024-03-25 13:46:12

C#Lambda編程

2020-10-16 06:40:25

C++匿名函數

2009-09-11 09:48:27

Linq Lambda

2009-08-10 17:11:34

.NET 3.5擴展方Lambda表達式

2009-09-15 15:18:00

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2021-06-08 07:48:26

lambda表達式編譯器

2009-10-12 10:11:08

Lambda表達式編寫

2012-06-26 10:03:58

JavaJava 8lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-08-27 09:44:59

C# Lambda表達

2009-09-15 17:30:00

Linq Lambda
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久野外| 一区二区成人国产精品| www.国产com| 精品日韩在线| 欧美一区二区三区性视频| 欧美 日韩 国产精品| 色猫av在线| 青青草精品视频| 国内精品小视频在线观看| www.中文字幕av| 久久综合偷偷噜噜噜色| 欧美色图在线视频| 欧美性受黑人性爽| 四虎国产精品永远| 国产成人免费网站| 国产精品成av人在线视午夜片| 黄色a级片在线观看| www.丝袜精品| 在线欧美小视频| 大陆av在线播放| 在线观看a视频| av一区二区久久| 国产美女91呻吟求| √资源天堂中文在线| 中文字幕一区二区av| 亚洲男人天堂视频| 蜜臀av粉嫩av懂色av| 亚洲欧洲二区| 欧美午夜电影网| 亚洲中文字幕无码中文字| 成人看片免费| 国产精品久久久久桃色tv| 久久久精品动漫| 欧美综合视频在线| 国产尤物一区二区在线| 国产精品狼人色视频一区| 亚洲免费激情视频| 欧美日韩网站| 美女啪啪无遮挡免费久久网站| 精品一区二区三区蜜桃在线| 999久久精品| 91精品国产色综合久久不卡蜜臀| 亚洲免费看av| 欧美成人精品一区二区男人小说| 午夜国产精品一区| 青青青在线视频播放| 尤物视频在线看| 亚洲品质自拍视频网站| 综合视频免费看| 秋霞午夜理伦电影在线观看| 国产人成一区二区三区影院| 欧美一区二区三区在线播放 | 欧美综合77777色婷婷| 日批视频在线播放| 99久久婷婷国产| 精品不卡一区二区三区| 免费a视频在线观看| 国产91丝袜在线播放| 亚洲xxx自由成熟| 精品免费久久久| 成人一级片网址| 国产精品12| 神马午夜精品95| 97精品国产露脸对白| 久久精品成人一区二区三区蜜臀 | 成人深夜在线观看| 国产精品一区而去| 深夜福利视频一区| 久久午夜色播影院免费高清| 欧美在线3区| 午夜在线播放| 亚洲精品美腿丝袜| 丁香花在线影院观看在线播放| 999精品网| 色综合婷婷久久| 国产精品久久久毛片| gogo大尺度成人免费视频| 欧美日韩国产综合视频在线观看| 中文字幕一区二区在线观看视频| 国产免费区一区二区三视频免费 | 国产精品久久久久一区二区国产| 国产人妖乱国产精品人妖| 咪咪色在线视频| 波多野结衣精品| 色婷婷av一区二区| www.com污| 狠狠久久伊人| 中文字幕精品在线| 18精品爽视频在线观看| 麻豆精品91| 91久久久久久久久久久| 日本国产在线观看| 亚洲国产精品成人综合| 青青草原网站在线观看| 校园春色亚洲| 制服丝袜av成人在线看| 国产乱了高清露脸对白| 97精品97| 欧美在线免费视频| 99久久久国产精品无码免费| 91在线免费视频观看| 一区二区免费电影| 欧美13videosex性极品| 91麻豆精品国产自产在线| 午夜一区二区三区免费| 中文字幕亚洲综合久久五月天色无吗''| 亚洲91精品在线观看| 一级日韩一级欧美| 久久丝袜美腿综合| 欧美日韩福利在线| 六九午夜精品视频| 日韩精品视频在线| 免费在线观看亚洲| 美女网站一区二区| 免费一区二区三区在在线视频| √天堂8在线网| 欧美三级欧美一级| 性久久久久久久久久| 国产综合欧美| 亚洲在线第一页| 国产youjizz在线| 欧美日韩国产中文字幕| 欧美一级片在线免费观看| 久久视频精品| 国产精品久久久久久久天堂| 天天操天天射天天| 亚洲高清免费视频| 无码国产精品一区二区高潮| 欧美韩日高清| 国产精品久久一区| 成人免费视频| 日本乱人伦aⅴ精品| 久久精品老司机| 亚洲理伦在线| 国产一区二区视频在线免费观看| 18+视频在线观看| 日韩欧美中文一区| 色欲一区二区三区精品a片| 毛片基地黄久久久久久天堂| 欧洲精品国产| 日韩影片中文字幕| 亚洲欧美另类国产| 无码人妻精品一区二区三区蜜桃91| 成人18视频在线播放| 亚洲精品无码国产| 久久91在线| 91成人福利在线| 无码精品人妻一区二区| 欧美日韩国产精品专区| 人妻丰满熟妇aⅴ无码| 日韩一级不卡| 鲁鲁视频www一区二区| 欧美xoxoxo| 国产一区二区三区在线| 中文字幕一区2区3区| 国产精品丝袜黑色高跟| 欧美在线aaa| 色偷偷综合网| 亚洲一区久久久| 免费在线播放电影| 日韩成人在线视频| 国产精华7777777| 亚洲国产精华液网站w| 日韩一区二区三区久久| 欧美~级网站不卡| 99热最新在线| 美女的胸无遮挡在线观看| 日韩电影中文字幕av| 中文字幕精品视频在线观看| 国产精品日韩成人| 一级片黄色免费| 亚洲午夜av| 欧美久久久久久| 久久夜夜久久| 欧美激情第1页| 天堂a√中文在线| 欧美视频在线免费看| 妖精视频在线观看免费| 国产精品996| 秋霞无码一区二区| 青青草97国产精品麻豆| 亚洲va码欧洲m码| 国产在线精彩视频| 中文字幕无线精品亚洲乱码一区| 精品国自产在线观看| 欧美日韩亚洲国产一区| 特黄一区二区三区| 成人午夜视频在线观看| 亚洲午夜免费| 日韩欧美的一区二区| 日韩av大片在线观看| 欧美国产综合色视频| 久久黄色一级视频| 欧美在线综合| 中国女人做爰视频| 亚洲区小说区| 97中文在线| free欧美| 国内精品久久久久久影视8| www.在线播放| 亚洲国产欧美一区二区丝袜黑人 | 免费高清在线一区| 欧妇女乱妇女乱视频| 欧美亚洲在线日韩| 懂色av一区二区三区在线播放| 午夜av成人| 高清欧美性猛交xxxx| 婷婷视频在线| 精品无人国产偷自产在线| 国产熟女精品视频| 在线欧美日韩国产| 午夜精品三级久久久有码| 成人免费在线观看入口| 国产精品无码久久久久一区二区| 国产成人免费视频一区| 手机av在线网| 天使萌一区二区三区免费观看| 丁香六月激情网| 亚洲第一偷拍| 亚洲午夜精品一区二区三区| 要久久电视剧全集免费 | 国产精品一在线观看| caoporen国产精品| 精品视频国内| 国产欧美日韩视频| av一区在线播放| 欧美最猛黑人xxxx黑人猛叫黄| 午夜dj在线观看高清视频完整版| 日韩中文在线视频| 免费一级毛片在线观看| 亚洲激情视频网| 免费观看a视频| 欧美成人乱码一区二区三区| 国产99对白在线播放| 欧美日产在线观看| 中文字幕+乱码+中文乱码www | av免费中文字幕| 亚洲美女91| 成人免费观看cn| 在线精品观看| 国产高清av在线播放| 欧美激情 亚洲a∨综合| 少妇高潮大叫好爽喷水| 在线电影一区二区| 亚洲高潮无码久久| 国内精品嫩模av私拍在线观看| 四虎精品欧美一区二区免费| 888久久久| 老司机午夜免费福利视频| 亚洲字幕久久| 国产毛片久久久久久国产毛片| 亚洲成人原创| 丝袜老师办公室里做好紧好爽| 午夜亚洲影视| 99草草国产熟女视频在线| 视频在线观看一区| 少妇一级淫免费放| 狠狠色综合播放一区二区| 三级黄色片免费观看| 国产精品影视天天线| 日本久久久久久久久久| 99国产麻豆精品| 自拍偷拍中文字幕| 中文字幕成人网| 国产美女久久久久久| 一区二区三区不卡视频| 日产亚洲一区二区三区| 日韩人体视频一二区| www.av88| 欧美一区二区三区公司| 亚洲美女福利视频| 亚洲精品mp4| 国产区av在线| 久青草国产97香蕉在线视频| 牛牛电影国产一区二区| 欧美一乱一性一交一视频| 亚洲第一会所001| 91精品国产综合久久香蕉最新版 | 色在线视频观看| 国产精品av在线播放| 亚洲ww精品| 狠狠干一区二区| 日韩精品影视| 国产成人在线小视频| 久久久噜噜噜| 91av免费观看| 国产日韩欧美高清在线| 国产黄在线免费观看| 精品动漫一区二区| 一区二区日韩视频| 亚洲国产欧美一区| 好了av在线| 136fldh精品导航福利| 57pao成人永久免费| 麻豆91av| 欧美在线二区| 久久99999| 99免费精品在线| 日本高清不卡免费| 91精品福利视频| 成人小说亚洲一区二区三区 | 久久超碰亚洲| 影音先锋日韩精品| www.激情小说.com| www.亚洲在线| 538精品在线视频| 欧美伊人久久久久久午夜久久久久| 性一交一乱一乱一视频| 一本色道久久综合狠狠躁篇怎么玩| 日本aa在线| 91精品久久久久久久久久久| 香蕉久久夜色精品国产更新时间| 亚洲美女自拍偷拍| 日韩**一区毛片| 精品久久久久久中文字幕人妻最新| 亚洲美女免费视频| 中文在线资源天堂| 国产香蕉97碰碰久久人人| 97蜜桃久久| av一区二区三区在线观看| 久久美女视频| 久久婷五月综合| 国产日韩欧美高清在线| 国产高潮久久久| 亚洲国产成人精品久久| 欧美日韩经典丝袜| 亚洲a级在线观看| 欧美3p在线观看| 在线免费观看视频黄| 国产亚洲一区二区在线观看| 日本最新中文字幕| 亚洲高清av在线| 懂色av一区| 不卡日韩av| 欧美深夜福利| 香蕉在线观看视频| 亚洲精品国产高清久久伦理二区| 国产精品久久久久久免费免熟| 一个色综合导航| 成人全视频在线观看在线播放高清| 欧美h视频在线| 模特精品在线| 久久精品国产亚洲AV熟女| 色先锋资源久久综合| 加勒比一区二区三区在线| 国产不卡av在线免费观看| 免费欧美视频| 爱情岛论坛成人| 欧美国产日韩一二三区| 在线观看免费高清视频| 日韩一区二区欧美| 99亚洲男女激情在线观看| 成人毛片100部免费看| 国产大陆精品国产| 国产真实夫妇交换视频| 亚洲精品成人久久| 中文字幕 在线观看| 青青成人在线| 日本成人超碰在线观看| 波多野结衣喷潮| 欧美精品丝袜中出| 尤物yw193can在线观看| 国产麻豆日韩| 久久精品官网| 亚洲女人毛茸茸高潮| 日韩欧美在线一区二区三区| 国产嫩草在线视频| 欧美日韩精品免费看| 毛片一区二区三区| 久青草免费视频| 亚洲美女性视频| 免费视频观看成人| 国产爆乳无码一区二区麻豆| 99久久伊人久久99| 波多野结衣视频免费观看| 久久精品国产一区二区三区| 精品午夜av| 日韩精品视频久久| 国产精品久久三区| 亚洲精品无遮挡| 国产成人精品一区二区| 国产精品99久久精品| 国产精品久久久久久亚洲av| 色婷婷综合久久久中文字幕| 日韩在线免费电影| 国产精品初高中精品久久| 久久青草久久| 国产女人18水真多毛片18精品| 日韩av在线免费| 亚洲18在线| 免费看又黄又无码的网站| 国产精品剧情在线亚洲| 少妇高潮一区二区三区99小说| 国产精品视频资源| 亚洲高清自拍| 日本在线观看网址| 日韩精品久久久久久福利| 香蕉成人在线| 黑人糟蹋人妻hd中文字幕| 亚洲免费观看在线观看|