日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java中的Lambda表達式

瀏覽:21日期:2022-08-30 09:39:11

Java 目前已經出到13的版本,但是國內大部分公司應該都停留在 Java 8 的版本(不敢承擔升級帶來的風險)。在Java8中給我們帶來了 Lambda表達式和Stream流式操作,提供了函數式編程和簡化批處理操作??赡艽蠹胰粘J褂煤芏啵呛苌偃リP注Lambda 和 Stream實現。本篇就帶著大家一起關注這兩塊知識,搬好小板凳我們一起看電視。

什么是Lambda

簡單來說,編程中提到的 lambda 表達式,通常是指需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。

一般我們使用變量來進行賦值操作:

詳解Java中的Lambda表達式

但是在 Java8 之前是沒有提供將一個方法賦值給一個變量的操作:

詳解Java中的Lambda表達式

在 JavaScript 中有 閉包的概念,所以 Java不甘落后,也去學習了人家,搞出了匿名函數的概念。

在Java 8里面,所有的Lambda的類型都是一個接口,而Lambda表達式本身,也就是”那段代碼“,需要是這個接口的實現。這是我認為理解Lambda的一個關鍵所在,簡而言之就是,Lambda表達式本身就是一個接口的實現。

基本語法:

(parameters) -> { expression or statements }

示例:

// 無參數, 返回1+2的結果() -> 1+2;// 接收一個參數(數字類型),返回其2倍的值x -> 2 * x;// 接收2個參數(數字),返回表達式運算的結果(x, y) -> x + y;// 多個語句要用大括號包裹, 并且返回值要用return指明(x, y) -> {int result = x + y;System.out.print(result);return result;};

Lambda表達式有如下約定:

一個 Lambda 表達式可以有零個或多個參數; 參數的類型既可以明確聲明,也可以根據上下文來推斷。例如:(int a)與(a)效果相同; 所有參數需包含在圓括號內,參數之間用逗號相隔。例如:(a, b) 或 (int a, int b) 或 (String a, int b, float c); 空圓括號代表參數集為空。例如:() -> 42; 當只有一個參數,且其類型可推導時,圓括號()可省略。例如:a -> return a*a; Lambda 表達式的主體可包含零條或多條語句; 如果 Lambda 表達式的主體只有一條語句,花括號{}可省略。匿名函數的返回類型與該主體表達式一致; 如果 Lambda 表達式的主體包含一條以上語句,則表達式必須包含在花括號{}中(形成代碼塊)。匿名函數的返回類型與代碼塊的返回類型一致,若沒有返回則為空。

@FunctionalInterface 是 Java 8 新加入的一種接口,用于指明該接口類型聲明是根據 Java 語言規范定義的函數式接口。Java 8 還聲明了一些 Lambda 表達式可以使用的函數式接口,當你注釋的接口不是有效的函數式接口時,可以使用 @FunctionalInterface 解決編譯層面的錯誤。

根據定義,函數式接口只能有一個抽象方法,如果你嘗試添加第二個抽象方法,將拋出編譯時錯誤。例如:

@FunctionalInterfacepublic interface DoSomethingInterface { void doSomeThing(); void doSomeThing1();}

詳解Java中的Lambda表達式

舉一個簡單使用的例子,首先定義一個接口:

@FunctionalInterfacepublic interface DoSomethingInterface<T> { String doSomeThing(T t);}

這個接口里面只能有一個函數,接口里是返回值為String類型的方法,那么下面使用它的時候就需要有返回值:

class MainTest{ public static void main(String[] args) { DoSomethingInterface<String> t = str -> { return str; }; String print = t.doSomeThing('print'); System.out.println(print); }}

t就相當于是接口的具體實現,那么使用 t.doSomeThing('print')就會去調用 t 的匿名函數執行。從這段代碼看,如果我們有一個抽象類的具體實現邏輯相對簡單不用大段代碼的時候,可以使用 Lambda 表達式去實現具體的邏輯,這樣就不用new 多個類。

Java 8 內置4大核心函數式接口

大家日常使用的List,Map,肯定大量使用了Stream流式處理,在流式處理中大量使用了Lambda,比如List的foreach方法就使用了Lambda表達式。Java8中抽象出來4類基本的函數式接口,日常開發中我們其實也是可以使用的。

函數式接口 參數類型 返回類型 用途 Consumer T Void void accept(T t) :將T 類型的參數應用于該方法 Supplier T T T get():返回類型為T 的對象 Function<T,R> T R R apply(T t):輸出T類型的參數返回R類型的結果 Predicate T Boolean boolean test(T t): 確定類型為T 的參數是否滿足test邏輯

以上4種類型是Java默認提供的Lambda類,開箱即用。

Consumer使用:

public void test(){ save(user, t->{ saveUser(t); });}public void save(User user, Consumer<User> consumer){ consumer.accept(user);}

Supplier使用:

public void test(){ Config config = getConfig(t -> { return getAllConfig(t); });}public Config getConfig(Supplier<Config> supplier) { return supplier.get();}

Function使用:

public void test(){ User user = getUser(t -> { return getUserByName(t); });}public User getUser(Function<String, User> function) { return function.apply(t);}

Predicate使用:

public void test(){ boolean b = checkStatus(user, t -> { return checkUserExist(t); });}public boolean checkStatus(User user, Predicate<User> predicate) { return predicate.test(user);}

以上關于Lambda就介紹到這里,大家應該明白了它是干啥的了吧。閉包是不是也沒有這么難懂呢!聯想到List的foreach使用,大家有沒有沖動想自己實現一個Lambda在日常開發中炫一把(如果別人看不懂,會打你的)。

到此這篇關于詳解Java中的Lambda表達式的文章就介紹到這了,更多相關Java中的Lambda表達式內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品yjizz视频网| 精品国产乱码| 久久人人97超碰国产公开结果| 国产suv精品一区| 精品网站999| 国产suv精品一区二区四区视频 | 久久青草久久| 私拍精品福利视频在线一区| 99久久精品网| 国产亚洲激情| 日韩精品一区二区三区av | 蜜桃久久久久久| 亚洲精品日本| 欧美午夜三级| 美女精品久久| 中文字幕在线高清| 亚洲第一区色| 性色av一区二区怡红| 四虎精品永久免费| 国产欧美日韩在线一区二区| 精品九九久久| 久久久久久久久久久9不雅视频| 欧美~级网站不卡| 蜜桃伊人久久| 久久国产欧美日韩精品| 国产videos久久| 激情五月综合| 日韩高清一区在线| 国产成人精品一区二区三区在线| 色综合www| 夜夜精品视频| 国产精品欧美日韩一区| 成人午夜精品| 国户精品久久久久久久久久久不卡| 亚洲一区二区网站| 国产一级成人av| 国产精品久久久久久久久久10秀| 1024精品久久久久久久久| 日韩在线黄色| 日韩欧美字幕| 亚洲尤物av| 麻豆精品视频在线观看| 99国产精品免费视频观看| 免费精品视频| 国产精品第一| 狠狠爱成人网| 国产激情一区| 欧美日韩国产在线观看网站 | 精品亚洲免a| 亚洲福利久久| 国产精品免费99久久久| 欧美特黄一级大片| 日本三级亚洲精品| 久久蜜桃精品| 国产日韩视频在线| 婷婷成人基地| 欧美a级一区二区| 亚洲精品一区二区在线看| 国产亚洲人成a在线v网站| 久久久久久久久久久妇女| 欧美日韩一区二区三区四区在线观看| 日韩精品欧美激情一区二区| 日韩精品欧美精品| 91精品国产乱码久久久久久久| 日韩av成人高清| 亚洲二区精品| 精品一区电影| 亚洲精品在线国产| 亚洲成a人片| 国产精品香蕉| 丝袜美腿高跟呻吟高潮一区| 98精品视频| 欧美日韩国产一区二区在线观看| 日韩精品网站| 岛国精品一区| 91麻豆精品激情在线观看最新| 91成人精品视频| 精品国产乱码久久久久久樱花| 亚洲精品乱码久久久久久蜜桃麻豆| av在线日韩| 久久精品亚洲| 日韩av不卡在线观看| 日韩午夜一区| 亚洲va中文在线播放免费| 欧美偷窥清纯综合图区| 国产精品毛片在线| 日本欧美不卡| 精品三区视频| 日本一区中文字幕| 伊人精品视频| 久久伦理在线| 成人av三级| 久久在线91| 欧美综合精品| 亚洲日本久久| 免费国产亚洲视频| 亚洲成人一区| 久久视频一区| 日本美女一区| 97欧美在线视频| 国产一区一一区高清不卡| 欧美一级久久| 日本一区二区三区中文字幕| 亚洲婷婷免费| 欧美日韩精品一区二区视频| 日本在线高清| zzzwww在线看片免费| 久久精品免视看国产成人| 欧美一级二区| 91精品在线免费视频| 亚洲精品乱码| 亚洲1区在线观看| 免费欧美在线视频| 免费久久99精品国产自在现线| 欧美福利一区| re久久精品视频| 婷婷成人基地| 女同性一区二区三区人了人一| 日韩av免费| 在线亚洲人成| 丝袜av一区| 伊人精品一区| 激情欧美一区二区三区| 蜜臀久久99精品久久一区二区| 久久久9色精品国产一区二区三区| 日本在线精品| 国精品一区二区三区| 狠狠干综合网| 日韩专区一卡二卡| 中文字幕一区二区av| 亚洲精品美女| 日韩高清欧美激情| 国产精品手机在线播放| 国产精品亚洲片在线播放| 国产极品一区| 久久久久伊人| 日韩欧美一区二区三区免费看| 美女福利一区二区三区| 青青青免费在线视频| 99精品在线| 中日韩男男gay无套| 亚洲小说春色综合另类电影| 日韩激情一二三区| 久久爱www成人| 日韩国产激情| 狠狠干成人综合网| 综合激情一区| 欧美aa在线视频| 98精品久久久久久久| 久久黄色影院| 六月天综合网| 久久精品999| 日本一二区不卡| 国产综合亚洲精品一区二| 在线日韩成人| 久久免费福利| 免费视频国产一区| 天堂va欧美ⅴa亚洲va一国产| 国产精品中文字幕制服诱惑| 成人午夜亚洲| 伊人成人网在线看| 欧美精品影院| 中文在线а√天堂| 国产一区清纯| 日韩不卡一二三区| 裤袜国产欧美精品一区| 中国女人久久久| 欧美日韩一视频区二区| 欧美日韩视频免费观看| 综合激情网...| 国产一区不卡| 日韩中文字幕一区二区三区| 丝袜美腿亚洲一区| 91亚洲自偷观看高清| 伊人精品视频| 久久国际精品| 99久久激情| 香蕉久久久久久| 国产精品毛片aⅴ一区二区三区| 人人香蕉久久| 日本欧美在线| 韩国精品主播一区二区在线观看 | 亚洲精品**中文毛片| 国产视频一区欧美| 久久不见久久见中文字幕免费| 精品一区在线| 国产精品sm| 美女精品在线观看| 久久精品国产久精国产爱| 婷婷亚洲五月| 免费亚洲婷婷| 蜜臀av性久久久久蜜臀aⅴ流畅 | 99久久视频| 69堂精品视频在线播放| 久久麻豆精品| 久久字幕精品一区| 亚洲三级在线| 亚洲高清激情| 久久久久黄色| 亚久久调教视频|