电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

詳解Java中的Lambda表達式

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

Java 目前已經出到13的版本,但是國內大部分公司應該都停留在 Java 8 的版本(不敢承擔升級帶來的風險)。在Java8中給我們帶來了 Lambda表達式和Stream流式操作,提供了函數式編程和簡化批處理操作。可能大家日常使用很多,但是很少去關注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
相關文章:
主站蜘蛛池模板: 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 滚珠丝杆升降机_螺旋升降机_丝杠升降机-德迈传动 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 传动滚筒_厂家-淄博海恒机械制造厂 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 余姚生活网_余姚论坛_余姚市综合门户网站 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | crm客户关系管理系统,销售管理系统,crm系统,在线crm,移动crm系统 - 爱客crm | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 |