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

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

詳解Java中的Lambda表達式

瀏覽:9日期: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
相關文章:
主站蜘蛛池模板: 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | QQ房产导航-免费收录优秀房地产网站_房地产信息网 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 步入式高低温测试箱|海向仪器 | 提升海外网站流量,增加国外网站访客UV,定制海外IP-访客王 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 威客电竞(vk·game)·电子竞技赛事官网 | 陕西鹏展科技有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 热处理炉-退火炉-回火炉设备厂家-丹阳市电炉厂有限公司 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 潍坊青州古城旅游景点攻略_青州酒店美食推荐-青州旅游网 | 旋转/数显粘度计-运动粘度测定仪-上海平轩科学仪器 | 考试试题_试卷及答案_诗词单词成语 - 优易学 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 |