当前位置: 首页 > 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.jsqmd.com/news/922381/

相关文章:

  • 终极魔兽争霸III游戏优化工具:简单三步提升你的游戏体验
  • 数据偏见:识别、规避与实战应对策略
  • Royal TSX中文汉化包:3分钟让专业远程管理工具说中文
  • 2026 年 5 个最佳 Agent Skills 平台推荐
  • 3个关键词让你的小爱音箱智能下载歌曲:Xiaomusic语音指令实用指南
  • 别再死记硬背公式了!用Python可视化带你直观理解两个高斯分布相乘(附Matlab/NumPy代码)
  • Maven与Gradle的区别
  • 终极网盘下载加速指南:3步实现直链解析与高速文件传输
  • 2026年珍珠棉厂家推荐排行榜:EPE珍珠棉/防震包装/五金电子包装/玻璃制品缓冲内衬/高密度珍珠棉卷材护角优选 - 企业推荐官【官方】
  • AI与大模型新闻日报 | 2026-05-31
  • 魔兽争霸3优化终极指南:5分钟解决现代电脑兼容性问题
  • 别再被间歇振荡搞懵了!用LTspice仿真RCC开关电源,从轻载到满载的完整避坑指南
  • 手把手教你用VMware安装华为EulerOS 2.0 SP5(附详细分区与开发环境配置)
  • 常州环创再生资源科技:江苏专业的废保护器回收公司怎么联系 - LYL仔仔
  • 西安曲江家政服务怎么选?2026曲江家政公司评测与实战落地指南 - 资讯快报
  • QMCDecode终极指南:3步快速解锁QQ音乐加密文件,免费实现音乐自由
  • Qt版本管理实战:从5.12.3平滑降级到5.9.8,并让VS2022同时识别多个Qt版本
  • 商业智能中AI的认知陷阱:如何识别与防范“听起来正确”的危险结论
  • 告别版本混乱!在Ubuntu 22.04上管理多个.NET SDK(8.0/6.0/7.0)的保姆级指南
  • 5个创意用法解锁Parsec-vdd虚拟显示器的隐藏潜力
  • AI赋能Web3营销:从数据洞察到个性化对话的实战指南
  • Visual Studio里那个烦人的C2143语法错误,我总结了新手最常踩的3个坑(附排查清单)
  • OBS StreamFX:免费打造专业级直播画面的终极特效插件
  • 新郑震捷再生资源:荥阳专业的废旧物资拆除公司有哪些 - LYL仔仔
  • D3KeyHelper终极指南:5分钟掌握暗黑3自动化战斗技能宏工具
  • 别等硬盘挂了才后悔!保姆级教程:用smartctl给你的Linux服务器硬盘做个全面体检(附关键指标解读)
  • 从N-gram到ChatGPT:语言模型的技术演进与核心原理剖析
  • 告别网盘限速烦恼:9大平台直链下载助手完全指南
  • 微信通讯录大扫除:如何用WechatRealFriends揪出那些悄悄删除你的“好友“
  • 市政设施三维智慧运维整体解决方案(2026完整版)