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

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

詳解Java中的Lambda表達式

瀏覽:10日期: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
相關文章:
主站蜘蛛池模板: 浙江自考_浙江自学考试网 | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 商秀—企业短视频代运营_抖音企业号托管 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 不发火防静电金属骨料_无机磨石_水泥自流平_修补砂浆厂家「圣威特」 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 北京遮阳网-防尘盖土网-盖土草坪-迷彩网-防尘网生产厂家-京兴科技 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 沈阳网站建设_沈阳网站制作_沈阳网页设计-做网站就找示剑新零售 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 砂磨机_立式纳米砂磨机_实验室砂磨机-广州儒佳化工设备厂家 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 |