当前位置: 首页 > news >正文

JDK1.8的几个简单Lambda表达式

前言

jdk1.8给广大程序员们带来了非常大的编程便利,不仅大大简化了代码,自带的一些语法更是让人眼花缭乱,提升程序性能。其中最常见有如下几种:lambda表达式、方法引用和构造器引用、Stream语法。下面一一简单讲解:

1.lambda表达式

1.1排序:

给itemList中merchantBatchSerialNo按照升序排序,其中字段类型属性为int、Integer、long等有大小比较的基本元素才可排序。

匿名类写法:

`List itemList = settleVmsMessage.getData().getItems();
Collection.sort(itemList,new Comparator(itemList.getMerchantBatchSerialNo())){
@Override
public int compare(Integer merchantS1,Intrger merchantS2){
return merchantS1.CompareTo(merchantS2);
}
}`

lambda写法

`List itemList = settleVmsMessage.getData().getItems();
itemList.sort((s2,s1)——>Integer.valueOf(s2.getMerchantBatchSerialNo()).compareTo(Integer.valueOf(s1.getMerchantBatchSerialNo())));
`

还有按照排序算法(冒泡、快速、归并....)

2.方法引用和构造器引用

2.1 方法引用:

objectName::instanceMethod

ClassName::staticMethod

ClassName::instanceMethod

前两种方式类似,等同于把lambda表达式的参数直接当成instanceMethod|staticMethod的参数来调用。比如System.out::println等同于x->System.out.println(x);Math::max等同于(x, y)->Math.max(x,y)。

最后一种方式,等同于把lambda表达式的第一个参数当成instanceMethod的目标对象,其他剩余参数当成该方法的参数。比如String::toLowerCase等同于x->x.toLowerCase()。

可以这么理解,前两种是将传入对象当参数执行方法,后一种是调用传入对象的方法。

2.2 构造器引用:

2.2构造器引用

构造器引用语法如下:ClassName::new,把lambda表达式的参数当成ClassName构造器的参数 。例如BigDecimal::new等同于x->new BigDecimal(x)。

3.Stream语法

两句话理解Stream:

1.Stream是元素的集合,这点让Stream看起来用些类似Iterator;

2.可以支持顺序和并行的对原Stream进行汇聚的操作;

大家可以把Stream当成一个装饰后的Iterator。原始版本的Iterator,用户只能逐个遍历元素并对其执行某些操作;包装后的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤掉

长度大于10的字符串”、“获取每个字符串的首字母”等,具体这些操作如何应用到每个元素上,就给Stream就好了!原先是人告诉计算机一步一步怎么做,现在是告诉计算机做什么,计算机自己决定

怎么做。当然这个“怎么做”还是比较弱的。

例子:

//Lists是Guava中的一个工具类

List nums = Lists.newArrayList(1,null,3,4,null,6);

nums.stream().filter(num -> num != null).count();

上面这段代码是获取一个List中,元素不为null的个数。这段代码虽然很简短,但是却是一个很好的入门级别的例子来体现如何使用Stream,正所谓“麻雀虽小五脏俱全”。我们现在开始深入解

刨这个例子,完成以后你可能可以基本掌握Stream的用法!

![](https://i-blog.csdnimg.cn/blog_migrate/6040486b2ebf7aa2aad1e3ccf6b73741.png)

图片就是对于Stream例子的一个解析,可以很清楚的看见:原本一条语句被三种颜色的框分割成了三个部分。红色框中的语句是一个Stream的生命开始的地方,负责创建一个Stream实例;绿色框

中的语句是赋予Stream灵魂的地方,把一个Stream转换成另外一个Stream,红框的语句生成的是一个包含所有nums变量的Stream,进过绿框的filter方法以后,重新生成了一个过滤掉原nums列表

所有null以后的Stream;蓝色框中的语句是丰收的地方,把Stream的里面包含的内容按照某种算法来汇聚成一个值,例子中是获取Stream中包含的元素个数。如果这样解析以后,还不理解,那就只

能动用“核武器”–图形化,一图抵千言!

![](https://i-blog.csdnimg.cn/blog_migrate/f563b54be73765160930ba43654bf6e2.png)

使用Stream的基本步骤:

1.创建Stream;

2.转换Stream,每次转换原有Stream对象不改变,返回一个新的Stream对象(可以有多次转换);

3.对Stream进行聚合(Reduce)操作,获取想要的结果;

 

![](https://i-blog.csdnimg.cn/blog_migrate/c6588a897387ffefcdda1428dcd8e7dd.jpeg)同名原创公众号:程序大视界

http://www.gsyq.cn/news/1433704.html

相关文章:

  • 别再死记硬背公式了!用Python可视化带你直观理解两个高斯分布相乘(附Matlab/NumPy代码)
  • 2026年珍珠棉厂家推荐排行榜:EPE珍珠棉/防震包装/五金电子包装/玻璃制品缓冲内衬/高密度珍珠棉卷材护角优选 - 企业推荐官【官方】
  • 别再被间歇振荡搞懵了!用LTspice仿真RCC开关电源,从轻载到满载的完整避坑指南
  • 魔兽争霸3优化终极指南:5分钟解决现代电脑兼容性问题
  • 常州环创再生资源科技:江苏专业的废保护器回收公司怎么联系 - LYL仔仔
  • QMCDecode终极指南:3步快速解锁QQ音乐加密文件,免费实现音乐自由
  • 商业智能中AI的认知陷阱:如何识别与防范“听起来正确”的危险结论
  • Visual Studio里那个烦人的C2143语法错误,我总结了新手最常踩的3个坑(附排查清单)
  • 市政设施三维智慧运维整体解决方案(2026完整版)
  • Online-disk-direct-link-download-assistant:深度解析网盘直链解析技术原理与优化配置
  • vscode如何免秘钥登入Ubuntu
  • 宏洛图 (HONGLT) 设计|重塑男士理容新境 —— 高端男士化妆品包装全案设计哲学 - 宏洛图品牌设计
  • 去中心化自治供应链:区块链、物联网与智能合约重塑工业协作范式
  • 高效智能的Zotero文献去重插件:一站式解决重复条目问题
  • 2026进口品牌安全联轴器厂家深度选型:不同工况匹配指南 - 资讯快报
  • 别再乱选Canvas渲染模式了!Unity UI开发中Screen Space - Overlay与Camera模式实战避坑指南
  • 统信UOS 1060右键菜单太乱?手把手教你清理‘打开方式’里的多余选项(以LibreOffice为例)
  • 抖音批量下载器终极指南:免费无水印内容一键获取
  • 抖音下载器技术突破:智能策略编排与高性能批量下载架构解析
  • 抖音批量下载工具终极指南:3分钟掌握无水印视频批量下载技巧
  • 终极指南:如何快速解密QQ音乐QMC加密文件,免费获得MP3/FLAC格式
  • UE4/UE5新手必看:Niagara插件开启后,你的特效制作效率能提升多少?
  • 2026年开发者求职指南:从技术基础到项目实战的差异化竞争力构建
  • 即梦去水印保存怎么还有水印2026全场景原因解析与标准化使用指南 - 科技热点发布
  • 小爱音箱Xiaomusic语音指令完整指南:为什么你的语音不能自动下载歌曲?
  • 保姆级教程:一劳永逸解决Ubuntu下编译大型软件(如GCC)的Segmentation Fault问题
  • 如何免费解锁Wand专业版:终极增强工具使用指南
  • 2026年苏州本地家庭卫生间防水维修选择靠谱品牌的核心分析 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • Ventoy进阶玩法:不止装系统,还能直接启动硬盘里的ISO镜像(附F2键妙用)
  • Steam创意工坊下载终极指南:WorkshopDL跨平台模组管理完全解决方案