使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序
作为JSR 335的一部分, Lambda表达式已从Java 8开始引入Java语言,这是Java语言的一个重大变化。 如果您想了解更多关于Lambda表达式以及JSR 335的信息,可以访问以下资源:
- 在OpenJDK上的Lambda项目 。
- Lambda常见问题解答 。
- 另一篇详细讨论lambda表达式支持的博客文章
- JSR 335的规范草案 。
如果我研究作为JSR 335一部分进行的每项功能/更改,那么这对我以及您都会感到困惑。 因此,为了使更改更容易理解,我将选择一些用例,并尝试应用作为JSR一部分添加的功能。 在开始之前,您必须下载支持lambda表达式语法的Netbeans版本以及具有JSR 335更改的JDK构建。
- 可以从此处下载具有JSR 335更改的JDK构建,即对lambda表达式的支持以及对collections API的增强。
- Netbeans具有对Lambda表达式的实验支持。
一旦下载了Netbeans每晚构建zip,您将必须解压缩内容,然后导航到bin目录以启动Netbeans。 并且,一旦下载并提取了具有JSR335支持的JDK的内容,就必须在Netbeans中的“工具”->“ Java平台”菜单中创建一个新平台,以便在JSR335更改后使用JDK。 添加Java平台弹出窗口类似于:
现在让我们考虑一个包含以下内容的列表作为示例:
List<Person> personList = new ArrayList<>();
personList.add(new Person('Virat', 'Kohli'));
personList.add(new Person('Arun', 'Kumar'));
personList.add(new Person('Rajesh', 'Mohan'));
personList.add(new Person('Rahul', 'Dravid'));
并允许使用Java 8之前的版本或当前的方法根据firstName对列表进行排序:
//Sorting using Anonymous Inner class.
Collections.sort(personList, new Comparator<Person>(){public int compare(Person p1, Person p2){return p1.firstName.compareTo(p2.firstName);}
});
如果您正在使用支持Lambda表达式的Netbeans夜间构建 ,则IDE将提供提示,内容为:
然后使用Netbeans支持将上面的代码替换为Lambda表达式,我们得到:
//Anonymous Inner class replaced with Lambda expression.
Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
人们可以看到使用Lambda表达式所减少的冗长程度。 而且现在的代码比使用Anonymous内部类时更清晰。 通过从参数中删除类型信息,可以使它更加简洁,因为从使用lambda表达式的上下文中可以推断出类型信息。
//Lambda expression with type information removed.
Collections.sort(personList, (p1, p2) -> p1.firstName.compareTo(p2.firstName));
让我们剖析上述lambda表达式以了解其组成部分。 Lambda表达式的一般语法为:()-> {} OR()->单个语句/表达式。 当lambda表达式的主体必须是一个块时,将使用()-> {}版本,而当lambda表达式具有单个语句/表达式时,将使用另一个版本。 在上述情况下,只有一个表达式,因此此处不使用块。 ()用于声明lambda表达式的参数。 参数可以具有类型信息,或者如果可以从上下文中推断出类型,则可以跳过这些参数。 在我们的例子中,类型信息是从上下文中推断出来的。 另一个观察结果是,lambda表达式等效于覆盖Comparator类中存在的compare方法。 并且它还替换了创建Anonymous Inner类的代码,以扩展Comparator类。
可以对上述代码进行的另一项更改是,“排序”方法已作为JSR 335更改的一部分添加到List类中,我们可以使用该方法对列表进行排序:
//Using sort method in List.
personList.sort((p1, p2) -> p1.firstName.compareTo(p2.firstName));
请注意,排序类存在于List类中,该类是支持JSR 335的JDK的一部分。 这只是在现有代码中使用Lambda表达式的示例示例。 有关更多详细信息,请访问我在帖子开头分享的链接。
参考: 在我们的JCG合作伙伴 Mohamed Sanaulla的“ 经验无限”博客中, 使用NetBeans Lambda支持使用Lambda表达式对Java 8中的列表进行排序 。
翻译自: https://www.javacodegeeks.com/2013/03/using-lambda-expression-to-sort-a-list-in-java-8-using-netbeans-lambda-support.html
使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序相关推荐
- java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)
最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...
- Java 8中使用Lambda表达式的策略模式
策略模式是" 设计模式:可重用对象的元素"书中的模式之一 . 本书所述的策略模式的意图是: 定义一系列算法,封装每个算法,并使它们可互换. 策略使算法独立于使用该算法的客户端而变化 ...
- python 字典的值是列表_python实现求和python如何通过列表中字典的值对列表进行排序...
一. 按字典值排序(默认为升序) x = {1:2, 3:4, 4:3, 2:1, 0:0} 1. sorted_x = sorted(x.iteritems(), key=operator.item ...
- 2.12用lambda表达式对列表进行排序
学习目标: ①:利用lambda表达式对列表进行排序 Python日常 内容展示: ①:利用lambda表达式对列表进行排序 a = [{'name':'Bill', 'age':40},{'name ...
- android studio lambda插件,在Android Studio中使用Lambda表达式(retrolambda)
在Android Studio中使用Lambda表达式 要在Android Studio中使用Lambda表达式,需要借助一个gradle插件来完成. A gradle plugin for gett ...
- java streamhandler_java中的Lamdba表达式和Stream
基于JDK 1.8 1.循环: // 以前的循环方式 for (String player : players) { System.out.print(player + "; ") ...
- lambda在python_在Python中使用lambda高效操作列表的教程
介绍 lambda Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错 result = lambda x: x * x result(2) # ...
- python中lambda函数if用法-Python中关于Lambda函数的使用总结
lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的 ...
- java 常量 表达式,java – Enum中的常量表达式
如果可能,修改getIndex()方法,使其返回枚举而不是整数.如果无法做到这一点,则需要将索引映射到枚举元素: 鉴于以下枚举: public enum Index { ONE, TWO, THREE ...
最新文章
- 网页设计师的必备选择20 +必需的Windows应用程序
- php+JQuery+Ajax简单实现页面异步刷新 (转)
- 在CLASSPATH中加载目录下所有的jar
- php验证旧密码,PHP验证数据库密码问题
- 深度网络模型裁剪和发布正规化
- 微信公众号开发(—)接口与服务器关联
- mysql配置性能_MySQL配置性能优化
- 生产力提升! 自己动手自定义Visual Studio 2019的 类创建模板,制作简易版Vsix安装包
- python贴吧-Python爬虫——抓取贴吧帖子
- 《工业元宇宙白皮书 2022年 》(附免费pdf下载地址)
- 64位系统装32和64位oracle,64位系统安装32位Oracle developer
- 努比亚修复工具_努比亚 X6 救砖教程 努比亚 NX601J恢复救砖教程
- 图像分割论文 “RANet : Region Attention Network for Semantic Segmentation”
- 许小年:企业家精神的衰落与重振
- Python中pass的使用
- 伪素数c语言代码,伪素数--绝对伪素数的分析与探求
- 金多多配资盘面预测收益大于风险
- 无招胜有招——面向对象设计模式随笔,
- 为什么路由器服务器无响应怎么回事啊,路由器服务器无响应怎么办
- Android Studio上Kotlin的入门,移动应用系统开发
热门文章
- RandomAccessFile类解析
- apache ignite_Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序
- java orm框架有哪些_Java Stream ORM现在带有JOIN
- java8返回单个号码_如何在单个API中支持Java 6、8、9
- java timer开销_减少Java垃圾收集开销的5条提示
- mockito入门_Mockito入门
- osgi:install_OSGi服务测试助手:ServiceCollector
- Java / Spring:如何快速生成整个Swagger记录的CRUD REST API
- 使用sstableloader恢复Cassandra Priam备份
- 掌握Java 11的Constantdynamic