安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Lambda表达式详细总结,理论加案例

6月10日 乱人心投稿
  满怀忧思,不如先干再说!通过学习,重新定义自己!JDK版本迭代
  近几年JDK更新速度非常快,2022年9月20号发布JDK19,作为Java语言的使用者,尤其是新入行和想要入行的朋友,不要被这么快的更新速度吓到,更不要被贩卖了焦虑,因为多数版本仅为过渡,如JDK19在2023年3月将会被JDK20替代,完全不必慌张,近几年JDK更新如此频繁,真正多的变化其实还在于JDK8之中。本文章为系列文章,后续内容持续推出!
  从1996年1月JDK1。0正式发布到现在,目前有三个主流的长期支持【LTS】版本为JDK8、JDK11、JDK17,因为JDK11并没有特别大的优化更新,46。45的企业还是使用2014年3月14号发布的JDK8,JDK17使用率仅在0。37
  JDK8重要更新
  继《JDK8更新官网原版详解》之后,本篇主要介绍一下JDK更新在编码层面的重要变化,也就是我们一线程序员需要掌握的都有哪些,网络上有许多教程,但恰恰是教程太多五花八门,不知所云,一个新特性怼六七个小时实属浪费时间,学无涯生也有涯,很多玩意我们知道就行不需要去掌握,不要去浪费时间,结合实际工作,我总结了如下几点:Lambda表达式:非常重要,一种新的编程语法,可简化代码,多数特性也基于该语法格式实现,Spring5源码也大量使用Lambda表达式,现阶段开发中大量使用函数式接口:接口中仅包含一个抽象方法的接口,Lambda表达式需要借助函数式接口实现Stream流:新增对数据的流式操作,不存储数据,仅用于数据计算,可以对集合、数组、文件等进行多重计算操作,开发简单,速度快接口增强:接口中可以提供默认方法方法引用:可以直接引用已有Java类和对象的方法或构造器,结合Lambda表达式使编程更紧凑简洁,减少冗余代码日期和时间类:全新日期时间API,设计合理,线程安全引入Optional:用来解决空指针异常
  小贴士:本篇文章主要讲解Lambda表达式Lambda表达式
  Lambda表达式支持将一个方法【行为】当做参数传递,这种编程方式称为【函数式编程】,这种编程方式最大的特点就是代码紧凑,减少冗余代码,让编程边的更加简洁,而Java最大的弊端就在于代码臃肿,在Python,Scala、JavaScript等语言中也都引入函数式编程,而Java通过Lambda表达式实现函数式编程势在必行!语法格式
  Lembda表达式通过左侧的参数,右侧的表达式和中间的右箭头组成:参数可以为空可以没有返回值有参有返回值(parameter1,parameter12,。。。){。。。}无参有返回值(){。。。}有参无返回值(parameter1,parameter12,。。。){。。。}无参无返回值(){。。。}实现原理Lambda表达式也并不是想用就用,必须依赖于函数式接口才可使用函数式接口:即接口中只有一个抽象法的接口,在JDK8及以后版本都会使用FunctionalInterface注解修饰类型推断:Lambda表达式无需指定参数类型,程序依然可以编译,Lambda表达式的类型依据上下文环境,由编译器推断出来参数类型,这就是类型推断重点掌握Lambda表达式实现前提理解函数式接口Lambda表达式实现语法和案例Lambda表达式简写Lambda对集合、线程等的操作练习无参实现
  Lambda表达式实现需要依赖于函数式接口,JDK内置了一些函数式接口,使用Supplier来实现无参Lambda讲解,至于函数式接口怎么自定义在后续单独介绍,保证连贯性,在此不穿插函数式接口其他内容!
  Supplier接口为JDK内置的供给型接口,特点为无参数但是有返回值,定义如下:
  代码:packagecom。importjava。util。function。S无参函数式接口publicclassNoArgsMain{publicstaticvoidmain(String〔〕args){1、原始方式实现SupplierIntegers1newSupplierInteger(){OverridepublicIntegerget(){return1024;}};通过get方法获取返回值System。out。println(s1。get());2、通过Lambda表达是实现SupplierStrings2(){returnLambda实现;};通过get方法获取返回值System。out。println(s2。get());}}
  简化代码:
  如果Lambda表达式有返回值且代码体只有一行代码时,return和大括号可以省略不写1、简化后代码如下publicclassNoArgsMain{publicstaticvoidmain(String〔〕args){1、函数体只有一行代码,return可以省略2、只有一行代码大括号可以省略SupplierStrings2()Lambda实现;通过get方法获取返回值System。out。println(s2。get());}}2、如果有多行,则不可以省略publicclassNoArgsMain{publicstaticvoidmain(String〔〕args){通过Lambda表达是实现,因为函数体有其他代码,不可省略return和大括号SupplierStrings2(){System。out。println(我是Lambda表达式体);returnLambda实现;};通过get方法获取返回值System。out。println(s2。get());}}有参实现
  通过JDK内置Consumer接口实现,接收参数但没有返回值,定义如下:
  代码实现:packagecom。importjava。util。function。CpublicclassHasArgsMain{publicstaticvoidmain(String〔〕args){1、原始实现ConsumerIntegerconsumer1newConsumerInteger(){Overridepublicvoidaccept(Integerparam){没有返回值System。out。println(我是消费型接口,只进不出哦!param);}};调用accpet方法消费数据consumer1。accept(1024);2、Lambda写法,ConsumerStringconsumer2(str){System。out。println(我是Lambda消费型接口,str);};consumer2。accept(石添添);}}
  简化写法:publicclassHasArgsMain{publicstaticvoidmain(String〔〕args){1、如果只有一个参数则可以省略小括号2、代码体只有一行代码则可以省略大括号ConsumerStringconsumer2strSystem。out。println(我是Lambda消费型接口,str);consumer2。accept(石添添);}}
  总结:如果代码体只有一行代码,无论有无参数,大括号都可省略如果有返回值,代码体只有一行代码则return可以省略如果有且仅有一个参数,参数的小括号可以省略,没有参数和有多个参数都不可省略、
  有没有那么一点点感觉,Lambda表达式简化了代码,让编码更加简洁,接下来我们通过更多案例对比进一步理解和使用Lambda表达式Lambda实现线程创建
  通过Runnable接口创建线程,如果想使用Lambda那么Runnable应该是一个函数式接口,函数式接口的特点是只有一个抽象方法,Runnable接口定义如下:
  代码实现:publicclassThreadMain{publicstaticvoidmain(String〔〕args){1、原始方式创建线程newThread(newRunnable(){Overridepublicvoidrun(){System。out。println(Thread。currentThread()。getName()线程启动);}})。start();2、使用Lambda表达式简写方式创建线程newThread(()System。out。println(Thread。currentThread()。getName()线程启动))。start();}}Lambda实现集合遍历
  集合操作新增forEach方法,接收一个Consumer类型对象,上边【有参实现】中介绍了,它是一个函数式接口
  代码实现:publicclassCollectionMain{publicstaticvoidmain(String〔〕args){创建集合ListStringlistnewArrayList();添加数据list。add(艾斯!);list。add(赛罗!);list。add(杰克!);list。add(雷欧!);1、原始遍历方式list。forEach(newConsumerString(){Overridepublicvoidaccept(Strings){System。out。println(s);}});2、因为Consumer是一个函数式接口,可以使用Lambad思考:简写形式怎么实现呢?list。forEach((str){System。out。println(str);});}}Lambda实现集合排序
  集合排序可以使用sort方法,sort方法接收一个Comparator类型数据
  Comparator接口定义
  小贴士:该接口中还有几个默认实现方法和静态方法,因为只有一个抽象方法所以也是函数式接口
  代码实现:publicclassCollectionSortMain{publicstaticvoidmain(String〔〕args){ListPersonpersonListnewArrayList();personList。add(newPerson(李小白,24));personList。add(newPerson(张二三,21));personList。add(newPerson(王五六,30));遍历System。out。println(排序前);personList。forEach(personSystem。out。println(person));排序,参数1参数2为升序排序System。out。println(排序后);personList。sort(newComparatorPerson(){Overridepublicintcompare(Personp1,Personp2){returnp1。getAge()p2。getAge();}});personList。forEach(personSystem。out。println(person));Lambda排序,参数2参数1为降序排序System。out。println(Lambda排序);直接简写形式,只有一行代码,大括号和return可以省略personList。sort((p1,p2)p2。getAge()p1。getAge());personList。forEach(personSystem。out。println(person));}}总结Lambda表达式简化开发,使编码变的简洁Lambda表达式需要依赖函数式接口实现,一定情况下可以简化写法StreamAPI、方法引用等特性需要基于Lambda实现Lambda表达式刚开始可能不习惯,多些就好,一定要多用哦
  后续将陆续推出其它新特性,记得关注哦!
投诉 评论

你了解多动症吗?儿童保健门诊经常会碰到忧心忡忡的家长:我家孩子特别好动,是得了多动症吧!到底什么是多动症?如何早期识别多动症?ADHD的高危因素有哪些?让我们看看专家怎么说。到底什么是多……Lambda表达式详细总结,理论加案例满怀忧思,不如先干再说!通过学习,重新定义自己!JDK版本迭代近几年JDK更新速度非常快,2022年9月20号发布JDK19,作为Java语言的使用者,尤其是新入行和想要……手机别乱选,这五款体验比较出色,价格也不算贵宁愿买贵的也不愿意买便宜廉价的手机,相信有很多用户在换新机的时候都会这么考虑。但是,现在的手机真的不能乱选,尤其是高端旗舰产品,说不定什么时候就会突然进行大幅度的降价,然后造成……20年过去了,它仍然是最佳港片在千禧年(2000)的节点,香港电影正在走向余晖的十字路口。这座饱经沧桑又乐观奋勇的城市,曾以香港电影的金字招牌,闪耀在亚洲乃至全世界,也启蒙了一代内地影迷。深植于……最近流行一种穿法羽绒服长靴,时髦显瘦,连杨幂都上头了最近的娱乐圈女明星们简直杀疯了,颁奖典礼上各个都明艳四射,不得不说真是老天爷赏饭吃,而且这次的典礼大家也都没有出现踩雷的情况,造型师狠狠地加分!不过要说到穿搭,怎么少得了杨幂的……有史以来观众最多的10场女子足球比赛几十年来,世界上最受欢迎的团队运动足球专注于男性球员,而女性则为参加大型比赛的权利而战。虽然男子足球自1900年以来一直参加奥运会,但女子直到1996年才有机会获得奥运金……A股股市放量下跌的真正原因找到了,中外资本金融之战打响了周末复盘就说了,今天是外资空头做空中国金融的第一战,果不其然从9:15分战斗就打响了。关于外资空头做空中国金融市场,今天整个国内金融圈达成共识,财经大V水皮、书生说财经等……山东,妹妹第一天上幼儿园,中班哥哥午餐时间跑来喂饭变身小家长近日,山东一位小男孩,在妹妹第一天上幼儿园时候,上中班的哥哥在午餐时间跑到妹妹的班里,亲自给妹妹喂午饭,哥哥的行为让幼儿园的老师都刮目相看。引起了网友的关注。随后老师把视……倘若身处黑暗,无人做你的光芒,那就自己照亮远方嗨月芽宝宝们中午好。欢迎来到明月浅谈,我是明月。一枚边带娃边做自媒体的三胎妈妈,欢迎和我一起写作、成长。侵删不知不觉就来到了开学季,明月浅谈的学生……社保未满15年的处理方法社保对每个人都是非常重要的,包括医疗、生育、工伤、失业、养老等五个方面的保障。只有当我们退休时缴纳了至少15年的社保,我们才能拿到养老金。也就是说,15年是社会养老……荆楚大地(5)江城浮影终有别,黄鹤已去换新颜头条创作挑战赛荆楚大地的美丽风光和文化古迹让人流连忘返,而短暂的国庆假期也最终快要走到尽头,从万里长江两坝水利枢纽重地宜昌到历史文化古城襄阳再到汽车之城十堰,祖国大好河山……前列腺增生?中医总结4个常用方,从根本解决男言之隐前列腺增生是男性老年人常见病,属于中医癃闭症的范畴。主要症状为尿频、滴沥不尽,或少腹胀急出现尿潴留,或滴沥失禁。关于前列腺增生症的发病原因,西医认为是由于内分泌失调引起的……
什么是链游?端游手游网游链游的解释一分钱不留,解约走人!荷兰国脚复仇巴萨,欲去尤文拿顶薪尊严年轻家长取名多不正经,四字名不再时尚,如今又整新花样嘘,这是它们的秘密基地渴望冒险,却在混乱之中迷失自我北京环球度假区一游客在过山车区出现突发状况身故黎侯观点手机是个好生意,华为手机开始换套路了翻翻美国油气业带血的账单PUBG迎新春系列武器饰品详情指南原来念念不忘,真的会有回响十年之后,我们终于走到了一起来这里,与文创大咖们一起听见河北文创的声音中国春节旅行预订暴增540,大批华人准备来澳!20万晚客房售儿童会出现的哪些性教育方面的问题岁月如歌年夜饭精选4道家常菜,鲜香美味,步骤简单,上桌家人都竖大拇指5178点七周年,A股重返5178点还要等多少年?要怎么培养孩子安静入睡呢付出社会人际交往中不好的心理笑话二则如何管理库存现金限额吹牛的资本阅读题答案我最向往的地方Unit14SchoolLunch优秀教案

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利