Java 8 Streams:过滤和谓词否定

最近,有关LJC 邮件列表的成员在流中.filter方法中使用谓词否定的有趣讨论,因此我认为值得在博客文章中进行总结。 讨论的主题是使用.filter和否定谓词的方法。

  • 这篇文章的代码可以在我的github帐户中找到 。

也许这就是您可能会想到的方式,但是这里有一些替代方法。

Stream.of(1, 2, 3, 4, 5, 6, 7).filter(((Predicate) c -> c % 2 == 0).negate())

答案1:编写谓词实用程序方法

您可以通过编写执行取反的实用程序方法来简化此操作。

public static <R> Predicate<R> not(Predicate<R> predicate) {return predicate.negate();
}

这导致代码更加整洁。

Stream.of(1, 2, 3, 4, 5, 6, 7).filter(not(c -> c % 2 == 0))
  • 在github上查看源代码

答案2:使用标识函数将方法引用转换为谓词

我们使用实用程序方法将方法引用转换为谓词。

public static <T> Predicate<T> predicate(Predicate<T> predicate) {return predicate;
}

尽管代码不是那么整洁。

Stream.of("Cat", "", "Dog").filter(predicate(String::isEmpty).negate())
  • 参考资料: 亨氏的Lambda减少原理

答案3:使用not(!)运算符

使用熟悉的not运算符。

Stream.of(1, 2, 3, 4, 5, 6, 7).filter((c -> c % 2 != 0))Stream.of("Cat", "", "Dog").filter(str -> !str.isEmpty())

该代码非常简单,并且立即熟悉。

有人争辩说,方法引用在重构时通常比简单的lambda难于阅读,并且比较棘手,并且流链中混合lambda和方法引用会使读者感到困惑。 参考: Java SE 8最佳实践

当您使用方法引用并希望IDE创建该方法时, IntelliJ会将其创建为一个静态方法,并将对象作为第一个参数。 使用not运算符可以避免这种情况。

以下是一些有用的参考:

  • Java 8 Lambdas:面向大众的函数式编程
  • Java SE 8最佳实践
  • 亨氏的Lambda减少原理
  • LJC邮件列表
  • 方法引用在某些JDK版本中存在错误

翻译自: https://www.javacodegeeks.com/2015/11/java-8-streams-filter-and-predicate-negation.html

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

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

相关文章

sql server2008如何修改mac地址_如何查看本机的MAC地址和IP地址?

MAC地址是每台电脑或是手机设备中唯一进行识别的编码&#xff0c;IP地址则是路由器分配给电脑或是手机设备联网使用的一个编码。当我们电脑或无法上网&#xff0c;都需要查看IP地址是否正确。那如何查看MAC地址和IP地址呢&#xff1f;方法一&#xff1a;如何电脑已经成功联网了…

计算机工作原理 仿真,虚拟DCS仿真工作原理

虚拟dcs(ViRTUal DCS)是相对于在过程工业系统中运行的真实DCS(Real DCS)而言的&#xff0c;"虚拟DCS"就是将真实DCS在非DCS的计算机系统中以某种形式再现。"虚拟"是现今广泛使用的一种高新技术概念&#xff0c;比如有实现视景模拟的"虚拟现实"、…

poj1062 Bellman 最短路应用

昂贵的聘礼Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 41066 Accepted: 11959Description 年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了&#xff0c;于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出…

vlookup练习_大胆合并吧!VLOOKUP坐字法专做单元格合并查找

回复[目录]学习113篇Excel教程全套Excel视频教程&#xff0c;微信扫码观看编按&#xff1a;前面才讲了Excel家规&#xff0c;数据源表不能有合并单元格&#xff0c;今天就嘚瑟地呼吁“大胆合并”。为何&#xff1f;因为老菜鸟给大家带来了单元格合并查找利器VLOOKUP坐字法查找。…

第一代计算机主要应用领域为数据处理,第一代计算机主要应用领域为____。    A.数据处理 B.人工智能 C.科学计算 D.过程控制...

C、科学计算。一代主要用于科学计算&#xff0c;二代用与数据处理。计算机发明者约翰冯诺依曼。计算机是20世纪最先进的科学技术发明之一&#xff0c;对人类的生产活动和社会活动产生了极其重要的影响&#xff0c;并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩…

jaxb 映射 空字段_JAXB和未映射的属性

jaxb 映射 空字段JAXB&#xff08;JSR-222&#xff09;是例外配置&#xff0c;这意味着存在默认映射应用于域对象。 这意味着有时您需要显式排除字段/属性。 在这篇文章中&#xff0c;我将讨论如何使用XmlTransient或XmlAccessorType&#xff08;XmlAccessType.NONE&#xff09…

vscode 书签_10个我必备的 VS code 拓展

推荐&#xff1a;Vue 3中令人激动的新功能&#xff1a;FragmentSuspense多v-modelVS Code是我最喜欢的文本编辑器。它是目前最可扩展的、最流行的代码编辑器。而且令人惊讶的是&#xff0c;它是由微软制作的(我知道)。在我看来&#xff0c;没有任何其他IDE或编辑器能比VS Code更…

u盘显示项目不在计算机zhng,能装在u盘上的操作系统有哪些?

满意答案zhng9211推荐于 2016.08.27采纳率&#xff1a;51% 等级&#xff1a;11已帮助&#xff1a;7556人可装在U盘上的操作系统现在的计算机技术简直日新月异&#xff0c;U盘&#xff0c;固态硬盘等等存储介质做的可以越来越大&#xff0c;并越来越便宜。电脑已经不是稀罕物…

推荐 -- 极客导航,让工作学习更有效率

给大家推荐一个导航&#xff0c;很实用&#xff1b;极客导航精心挑选网址&#xff0c;让您的工作更有效率&#xff1b; 传送门&#xff1a; http://www.gogeeks.cn/ 转载于:https://www.cnblogs.com/JsonShare/p/7064438.html

从数组到流再到Java 8

不久前&#xff0c;我们将一些Eclipse插件项目升级到Java8。此后再也没有回头。 除其他事项外&#xff0c;使用lambda和streams API &#xff0c;过滤&#xff0c;映射和查找集合中的元素变得更加容易和简洁。 我想到目前为止&#xff0c;对于大多数人来说&#xff0c;什么都没…

iphone型号表_机器人造iPhone,苹果奋斗八年,还是败给了富士康工人

8 年前&#xff0c;当蒂姆 库克在富士康观看机器人进行 iPad 实验生产视频时&#xff0c;似乎看到了新时代的希望。郭台铭曾表示&#xff0c;预计在 2014 年可以在富士康工厂中部署 100 万台机器人&#xff0c;进而实现高度自动化的「无人工厂」。机器之心报道&#xff0c;参与…

笔记本如何选择修复计算机,如何处理旧的笔记本电脑?这些操作必不可少!

原标题&#xff1a;如何处理旧的笔记本电脑&#xff1f;这些操作必不可少&#xff01;如何处理旧的笔记本电脑&#xff1f;不要把它丢掉。那台旧笔记本电脑至少应适当回收。就算是打算仅回收旧笔记本电脑&#xff0c;也请确保有效擦除所有数据。备份如今&#xff0c;云服务如此…

Android开源工具项目集合

最近因为要去外派了&#xff0c;工欲善其事&#xff0c;必先利其器&#xff01;所以又回顾了一下自己github上所收藏的项目&#xff0c;也算是温故而知新吧。 最流行的Android组件大全 http://www.open-open.com/lib/view/open1409108030307.html android开源项目分类汇总 http…

算法工程师和python_算法工程师只掌握Python行吗?如果在java和cpp中选一门语言学习哪个更有用?...

算法工程师只掌握python有可能不够用的。算法本身是脱离编程语言的。以目前的市场环境格局&#xff0c;大量的算法工程师都不可能全部时间精力投入到算法研究上来&#xff0c;是要实际参与到也许项目里面去的。不论是ai相关的模式识别方面的算法还是传统的一些计算机确定性算法…

删除 终端服务器,终端服务器命令更改 - Windows Server | Microsoft Docs

终端服务器命令&#xff1a;更改09/14/2020本文内容本文提供有关终端服务器命令的一些信息 change 。适用于&#xff1a; Windows Server 2012R2原始 KB 编号&#xff1a; 186504摘要该命令 change 将替换 Citrix Winframe 中的 CHGLOGON、CHGUSER 和 CHGPORT。更改实用程序…

Android-Universal-Image-Loader学习笔记(3)--内存缓存

前面的两篇博客写了文件缓存。如今说说Android-Universal-Image-Loader的内存缓存。该内存缓存涉及到的类如图所看到的 这些类的继承关系例如以下图所看到的&#xff1a; 如同文件缓存一样&#xff0c;内存缓存涉及的接口也有两个&#xff1a;MemoryCacheAware 和MemoryCache&a…

java nosql_Java EE的NoSQL的未来

java nosql从现在开始一段时间以来&#xff0c;我一直在关注NoSQL的近期发展势头&#xff0c;似乎这个流行语也引起了企业Java界的某种关注。 即EclipseLink 2.4开始支持MongoDB和Oracle NoSQL 。 将EclipseLink作为JPA参考实现&#xff0c;您可能想知道这对Java EE 7意味着什么…

css设置字体颜色怎么设,css里面怎么设置字体颜色?

在html中我们经常要用到css样式来美化html标签的一些不足之处&#xff0c;今天我们就来说说如何用css的基本样式来改变文本的颜色&#xff0c;文章通俗易懂&#xff0c;希望大家看完后能练习练习加深印象。一、首先我们先给大家看个html字体的基础代码&#xff1a;HTML中文网字…

visio科学图形包_科学网—科研必备:几款好用的流程图工具,助力你的论文/科研绘图...

写SCI论文常常会遇到一个问题——如何才能让读者通俗易懂地理解自己的研究&#xff1f;如果不能让读者了解研究过程&#xff0c;读者会对研究结果是否合理、如何应用存在疑问&#xff1b;尤其是期刊编辑和审稿人如果不能通过咱们的叙述&#xff0c;清楚地了解研究内容&#xff…

网络通信基础(草稿)

应用层&#xff1a;httpd/ssh/ 等软件 应用层功能&#xff1a;规定应用程序的数据格式。传输层&#xff1a;tcp/udp --> port&#xff0c;唯一标识一个主机上的某个进程 端口范围0-65535&#xff0c;0-1023为系统占用端口 传输层的功能&#xff1a;建立端口到端口的通信…