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;如何电脑已经成功联网了…

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

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

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

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

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

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…

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

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

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;建立端口到端口的通信…

JSF范围教程– JSF / CDI会话范围

会话作用域跨越多个HTTP请求-响应周期&#xff08;理论上是无限的&#xff09;。 当您需要每个HTTP请求-响应周期进行一次交互时&#xff0c;请求作用域在任何Web应用程序中都非常有用。 但是&#xff0c;当您需要对属于用户会话的任何HTTP请求-响应周期可见的对象时&#xf…

数字通信原理_光耦继电器在实际应用中的作用以及工作原理!

光耦继电器---先进光半导体由于光耦继电器输入输出间互相隔离&#xff0c;电信号传输具有单向性等特点&#xff0c;因而具有良好的电绝缘能力和抗干扰能力。又由于光耦的输入端属于电流型工作的低阻元件&#xff0c;因而具有很强的共模抑制能力。所以&#xff0c;它在长线传输信…

css的fill属性,css column-fill属性怎么用

css column-gap属性定义及用法在css中&#xff0c;column-gap属性通常和columns、column-count等分列属性一起使用&#xff0c;用来设置元素内容分列(多列布局)后列与列之间的距离css column-gap属性语法格式css语法&#xff1a;column-gap: length / normal;(例&#xff1a;co…

css点击事件不做反应,纯css无js实现点击事件

已经阅读主要根据的技术点&#xff1a;标签为 input 元素定义标注(标记)。label 元素不会向用户呈现任何特殊效果。不过&#xff0c;它为鼠标用户改进了可用性。如果您在 label 元素内点击文本&#xff0c;就会触发此控件。就是说&#xff0c;当用户选择该标签时&#xff0c;浏…

Spring Integration Framework简介

我们非常了解Spring框架和JMS 。 在本文中&#xff0c;我们将介绍称为Spring Integration的企业集成框架 。 Spring Integration是一个开源企业集成框架&#xff0c;可增强Spring单独完成的功能。 Spring Integration构建在Spring的IoC之上&#xff0c;它抽象了消息源和目标&am…

网络营销广告投放策略

网络营销广告投放策略 网络营销第一桶金&#xff1a;10年微博热火&#xff0c;粉丝1毛一个&#xff0c;我看到了这个机会。开发了注册微博账户的软件可以卖粉丝了怎么推广呢微博账户头像上加广告&#xff0c;去关注活人&#xff0c;被关住的人&#xff0c;就能看到广告&#xf…

空间皮肤代码_OpenCV实现皮肤表面粗糙度3D显示

点击上方蓝字关注我们微信公众号&#xff1a;OpenCV学堂关注获取更多计算机视觉与深度学习知识问题分析与思路这个是最近有人问我的一个问题&#xff0c;想把一个拍好的皮肤图像&#xff0c;转换为3D粗糙度表面显示&#xff0c;既然是粗糙度表面显示&#xff0c;我想到的就是把…