在JDT中使用Java 8 Lambda
旧 Curmudgeon 认识Smalltalk的Dude
在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言。
我承认我对Java 8中的lambda有点不满意。 当然,这来自于知道Smalltalk (和LISP / Scheme)的老兄 。
像其他任何优秀的Smalltalk中奖记录一样,当我着手学习如何使用lambda时,我自然决定实现已知和喜爱的集合。
从这样的事情开始:
OrderedCollection employees = new OrderedCollection();
employees.add(new Employee("Wayne", 10));
employees.add(new Employee("Joel", 9));
employees.add(new Employee("Jon", 6));
employees.add(new Employee("Anthony", 8));
employees.add(new Employee("Mary", 2));
employees.add(new Employee("Sue", 3));
employees.add(new Employee("Joanne", 7));
employees.add(new Employee("Shridar", 1));
在经典Java中,您将执行以下操作来寻找具有五年以上经验的员工:
List longTerm = new ArrayList();
for(Employee employee : employees) if (employee.years > 5) longTerm.add(employee);
使用lambda,您可以执行以下操作:
OrderedCollection longTerm = employees.select(employee -> employee.years > 5);
它比经典Java更加严格,我个人认为它非常易读和易懂; 具有不同经验的读者可能有不同的选择。 我相信这比匿名类的等效实现要好得多:
OrderedCollection longTerm = employees.select(new SelectBlock() {@Overridepublic boolean value(Employee employee) {return employee.years > 5;}
});
匿名班使婴儿哭泣。
当然,婴儿也不会对select()
的实现特别满意:
public class OrderedCollection<T> extends ArrayList<T> {...public OrderedCollection<T> select(SelectBlock<T> block) {OrderedCollection<T> select = new OrderedCollection<T>();for(T value : this) {if (block.value(value)) select.add(value);}return select;}...
}
Lambda是匿名类的语法糖 ,可以说使某些代码更易于阅读。 对于我的简单化示例,从可读性的角度来看,直接使用for
-loop的好处是微不足道的,但比匿名类示例更容易理解。 从性能的角度来看,我希望在这种情况下使用lambda或匿名类比仅使用for
-loop差一个数量级。
我们在Smalltalk中做的比较酷的事情之一就是创建自己的控制结构。 您可以创建自定义的迭代器,而不是创建一个全新的集合,例如:
payroll.longTermEmployeesDo(employee -> payroll.giveEmployeeARaise(employee));
或类似的东西。 我不确定这是否会更好。
简单集合可能不是lambda的最佳用法。 Lambda并不像Smalltalk中的代码块那么有用(或者,我相信它有效率)。 我需要花更多时间修改一些示例,这些示例中Java中使用匿名类更为自然( Runnable
和侦听器似乎是一个显而易见的起点)。
不幸的是,我认为尝试使用Java 8中的lambda实现类似于Smalltalk的集合也会使婴儿哭泣。
作为分手,请尝试绕开您的大脑:
double average = (double)employees.inject(0, (sum, employee) -> sum + employee.years) / employees.size();
完全可读。 完全。
于2014年2月18日修改。 最初的观察使我相信lambda是匿名类的语法糖。 从那以后,我得知情况并非如此。 此外,我需要更好地理解一些优化。 我删除了不正确的陈述(但为了后代而留了它)。
翻译自: https://www.javacodegeeks.com/2014/02/playing-with-java-8-lambdas-in-the-jdt.html
在JDT中使用Java 8 Lambda相关推荐
- java jdt_在JDT中使用Java 8 Lambda
java jdt 旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 (JDT)项目正在开发的Java 8支持时,我一直在使用这种语言. 我承认我对Ja ...
- 一行中的Java 8 Lambda
如果您了解这一行,或者更好的是仍然可以编写此代码,则可以说您已经了解了Java 8 Lambda的本质. 当然,它们可以与集合一起使用. 我在Peter Lawrey最近的一次演讲中发现了这一点 . ...
- lambda表达式_在Java 7或更早版本中使用Java 8 Lambda表达式
lambda表达式 我认为没有人会拒绝Java 8引入的Lambda表达式的有用性.但是,许多项目都停留在Java 7甚至旧版本上. 升级可能既耗时又昂贵. 如果第三方组件与Java 8不兼容,则可能 ...
- 在Java 7或更早版本中使用Java 8 Lambda表达式
我认为没有人会拒绝Java 8引入的Lambda表达式的有用性.但是,许多项目都停留在Java 7甚至旧版本上. 升级可能既耗时又昂贵. 如果第三方组件与Java 8不兼容,则可能根本无法升级. 除此 ...
- java 8 lambda表达式中的异常处理
文章目录 简介 处理Unchecked Exception 处理checked Exception 总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,l ...
- java lambda::_书评:精通Lambda:多核世界中的Java编程
java lambda:: 从版本8开始,λ编程(lambda编程)终于在Java世界中引入.此功能将在很大程度上改变Java开发人员的编程方式以及针对样板代码的新"武器". Ja ...
- 书评:精通Lambda:多核世界中的Java编程
从版本8开始,λ编程(lambda编程)终于在Java世界中引入.此功能将在很大程度上改变Java开发人员的编程方式以及针对样板代码的新"武器". Java 8通过引入新的Stre ...
- JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象
转载自:https://www.cnblogs.com/lindsayYang/p/9843599.html JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象 当前的需求 ...
- 10个Java 8 Lambda表达式经典示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...
最新文章
- PE文件和COFF文件格式分析——导出表
- 报错解决:undefined reference to `snappy::MaxCompressedLength(unsigned long)'
- poj1985 Cow Marathon(树的直径#入门)
- Android中Application类用法
- java中如何数组是如何赋值的?
- 第一次作业源于计科一班的王相博
- 别再用 Redis List 实现消息队列了,Stream 专为队列而生
- 我就是互联网的老不死
- 神经网络在游戏中的应用,神经网络控制应用实例
- 指数函数用计算机怎么计算器,万能计算器怎么使用 使用科学计算器方法
- 微信小程序锦鲤砍价 搭建教程完整版
- 老男孩python作业题_老男孩python学习第一天作业
- 在面试中脱颖而出的流程全解
- lol人物模型提取(三)
- [操作系统]进程管理 进程同步、死锁相关、处理机调度
- word文档除号怎么打出来之除号插入的方法教程
- Java初学者都必须理解的六大问题
- Flask 源码解析:session
- 多线程之互斥锁(mutex)的使用方法
- 【Rust 日报】2022-10-16 全栈同构Web框架leptos
热门文章
- 2015c语言9月答案,2015年9月计算机二级C语言预测题答案
- python3多线程第三方库_Python3 多线程
- (转)HttpURLConnection与 HttpClient 区别
- java泛型程序设计——翻译泛型表达式+翻译泛型方法
- 省编码市编码区县编码_无浪费编码
- java.线程池 线程数_如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...
- java性能监视_Java 9和应用程序性能监视的激动人心之处
- log4j2 xsd_Log4j 2.x XSD的描述不完整
- jasmine单元测试_使用Jasmine,Spock和Nashorn测试JVM服务器端JavaScript
- 在Java 8之前的项目中使用JUnit 5