在JDT中使用Java 8 Lambda

知道Smalltalk的老Curmudgeon Dude

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是匿名类的语法糖。 从那以后,我得知情况并非如此。 此外,我需要更好地理解一些优化。 我删除了不正确的陈述(但为了后代而留了它)。

参考: Eclipse提示,技巧和Random Musings博客上的JCG合作伙伴 Wayne Beaton在JDT中使用Java 8 Lambdas玩游戏 。

翻译自: https://www.javacodegeeks.com/2014/02/playing-with-java-8-lambdas-in-the-jdt.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[POJ1463] Strategic game

题目链接&#xff1a; 传送门 题目大意&#xff1a; Bob非常享受玩电脑游戏的过程&#xff0c;尤其是策略游戏&#xff0c;但是在有些时候&#xff0c;他因为不能在第一时间找到最佳的策略而十分伤心。 现在&#xff0c;他遇到了一个问题。他必须保卫一个中世纪的城市&#xff…

zabbix邮件告警

zabbix邮件告警调用第三方邮件服务来发送邮件。 [roottiandong ~]# yum install mailx -y 修改配置文件 [roottiandong ~]# vim /etc/mail.rc 67 set from15600857257163.com smtpsmtp.163.com 68 set smtp-auth-user15600857257163.com 69 set smtp-auth-password密码&#xf…

模糊推理机制 matlab,基于模糊综合评判推理机制的学生素质评价系统设计与实现...

第22卷第2期2002年2月文章编号&#xff1a;(2002)l00l-908l2-008l-03计算机应用ComputerAppIicationsVoI.22,No.2Feb.,2002基于模糊综合评判推理机制的学生素质评价系统设计与实现尹世群(西南师范大学计算机与信息科学学院&#xff0c;重庆4007l5)摘要&#xff1a;根据模糊数学…

SweetAlert – 替代 Alert 的漂亮的提示效果

Sweet Alert 是一个替代传统的 JavaScript Alert 的漂亮提示效果。SweetAlert 自动居中对齐在页面中央&#xff0c;不管您使用的是台式电脑&#xff0c;手机或平板电脑看起来效果都很棒。另外提供了丰富的自定义配置选择&#xff0c;可以灵活控制。 在线演示 插件下载 您可…

onpagefinished等了很久才执行_今天自律了吗?停课不停锻炼 才是战疫正确姿势

近日&#xff0c;中青校媒面向全国915名高校学生发起关于“宅家运动”情况的调查&#xff0c;发现15.39%被调查者在家期间会严格执行锻炼计划&#xff0c;39.96%选择间歇性完成制订的运动目标&#xff0c;还有44.65%在家很少运动。(3月18日《中国青年报》)新冠肺炎疫情发生&…

Spring Data Couchbase 1.0 GA发布

Spring Data Couchbase 1.0 GA版本已发布&#xff01; 该项目是Spring Data项目的一部分&#xff0c;该项目旨在为新数据存储提供熟悉且一致的基于Spring的编程模型&#xff0c;同时保留特定于存储的功能。 Spring Data Couchbase项目提供了与Couchbase Server数据库的集成。 …

网络验证php接口逆向,一个专利查错的逆向(网络验证)

[C#] 纯文本查看 复制代码bool flag true;if (!fileInfo.CreationTime.ToString().Equals(configData.fileCreateTime))//这里是校验License&#xff0c;直接删除掉{MessageBox.Show("认证文件已损坏&#xff01;");flag false;Application.Exit();}if (flag){Lice…

kickstart-G

感觉自己很蠢&#xff0c;large数据只能交一次&#xff0c;忘记这回事了 A题 O(n^2)解法&#xff0c;用vector<set> 缓存j后面的数据&#xff0c;减少一重循环 1 #include <string>2 #include <vector>3 #include<iostream>4 #include<cstdio>5 …

Ocrad.js – JS 实现 OCR 光学字符识别

Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本&#xff0c;使用 Emscripten 自动转换。这是一个简单的 OCR &#xff08;光学字符识别&#xff09;程序&#xff0c;可以扫描图像中的文字回文本。 不像 GOCR.js&#xff0c;Ocrad.js 被设计成一个端口&#xff0c;而不是围绕…

c++ ptree判断是否存在节点_CTreeCtrl 查找 等于某值 的节点,并设置为高亮

查找节点&#xff0c;并返回该节点HTREEITEM GroupTree::FindTreeItem(HTREEITEM item,CString& strText){HTREEITEM hFind;if(item NULL)return NULL;while(item!NULL){if(m_pTree->GetItemText(item) strText)return item;if(m_pTree->ItemHasChildren(item))…

oracle安装出现getproces,oracle安装问题

一.引入问题帮朋友在CentOS上安装一个10g的Oracle&#xff0c;结果朋友的CentOS版本是6.2的版本&#xff0c;最新的一个版本&#xff0c;不过Linux上基本都差不多&#xff0c;所以按照以前的步骤&#xff0c;迅速的操作起来&#xff0c;结果遇到N多以前没有遇到过的错误。安装被…

使用Java和JCEKS进行AES-256加密

总览 由于最近爱德华斯诺登 &#xff08; Edward Snowden&#xff09;发布了文件以及针对JC Penny &#xff0c; Sony和Target等在线商业商店的黑客入侵&#xff0c;安全性已成为近年来讨论的重要话题。 虽然本文不会为您提供帮助防止使用非法来源数据的所有工具&#xff0c;但…

Sequence.js 实现带有视差滚动特效的图片滑块

Sequence.js 功能齐全&#xff0c;除了能实现之前分享过的现代的图片滑动效果&#xff0c;还可以融合当前非常流行的视差滚动&#xff08;Parallax Scrolling&#xff09;效果。让多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来非常出色的视觉体验。…

【SQL Server 学习系列】-- sql 随机生成中文名字

【SQL Server 学习系列】-- sql 随机生成中文名字 原文:【SQL Server 学习系列】-- sql 随机生成中文名字1 DECLARE fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 姓氏2 DECLARE lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)…

本地方法栈线程公有_Java运行时区域,哪些区域是线程私有的?哪些是共有的?...

JVM 运行时数据区域大致可以分为&#xff1a;程序计数器、虚拟机栈、本地方法栈、堆区、元空间、运行时常量池、直接内存等区域&#xff1b;就是下面这个样子的&#xff1a;其中有些区域&#xff0c;随着 JDK 版本的升级不断调整&#xff0c;例如&#xff1a;JDK 1.6&#xff0…

matlab wc wp,数字信号处理MATLAB习题.PDF

数字信号处理MATLAB习题数字信号处理MATLAB 习题电气硕 72 李弘昌第11 题分别用脉冲响应不变法和双线性变换法设计一个巴特沃斯型IIR 低通数字滤波器&#xff0c;采样频率 &#xff0c;其通带边频 处的衰减为 &#xff0c;阻带边频 处的衰减为 。给出设计该滤波器的MATLAB 程序…

开源JVM Sampling Profiler

众所周知 &#xff0c;大多数现有的采样Java Profiler都必须在安全的地方进行堆栈跟踪收集。 诸如采样探查器之类的探查器就是这种情况&#xff0c;它使用SUN / Oracle管理代理来收集其堆栈跟踪。 这种方法的问题在于&#xff0c;由于不是程序中的每个点都不是安全点&#xff0…

Solidity中的基本类型转换

Solidity中的基本类型转换&#xff08;十四&#xff09;|入门系列 2017/4/29 posted in Solidity入门系列 点击查看原文&#xff0c;获得优化的排版。 隐式转换 如果一个运算符能支持不同类型。编译器会隐式的尝试将一个操作数的类型&#xff0c;转为另一个操作数的类型&#x…

雷霆战机

前言 多年前&#xff0c;你我在一起"打飞机"。为了实现真正的打飞机&#xff0c;在下一年前踏足帝都学习了无所不能的Python&#xff0c;辣么接下来带你在俩个小时用200行代码学会打飞机。 python中提供了一个pygame的模块能够让我们快速编写一个游戏。接下来&#x…

FancyBox - 经典的 jQuery Lightbox 插件

FancyBox 是一款非常优秀的弹窗插件&#xff0c;能够为图片、HTML 内容和其它任务的多媒体内容提供优雅的弹出缩放效果。作为是最流行的 Lightbox 插件之一&#xff0c;可以通过 fitToView 实现自适应功能。主要特色&#xff1a; ✓ 能够显示图片、HTML 元素、SWF 影片、ifra…