java8 streams_Java 8 Streams:过滤和谓词否定

java8 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

java8 streams

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

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

相关文章

hystrix熔断 简介_Hystrix简介– Hello World

hystrix熔断 简介在以前的博客文章中&#xff0c;我介绍了需要像Netflix Hystrix这样的库的动机。 在这里&#xff0c;我将跳入一些非常基本的方法来开始使用Hystrix&#xff0c;并在更复杂的用例中进行跟进。 你好&#xff0c;世界 以下是“ Hystrix命令”的一个简单的Hello …

php中哪个函数用于读取文件,PHP内置函数fget读取文件

php fgets()函数从文件指针读取一行语法:fgets(file,length)参数说明必需的. 指定姚要读取的文件长度可选. 指定姚都区的字节数. 默认值为102字节从文件所指向的文件中读取一行&#xff0c;并返回最大长度为1个字节的字符串. 遇到换行符(包含在返回值中&#xff0c;)&#xff0…

c++返回指针时候注意提防_提防Java中的函数式编程!

c返回指针时候注意提防这对函数式编程并不会造成太大的影响&#xff0c;这真棒。 这是关于某些实践的警告&#xff0c;您很可能会将其应用于您的代码&#xff0c;而这是完全错误的&#xff01; 。 高阶函数对于函数式编程是必不可少的&#xff0c;因此&#xff0c;谈论它们将帮…

centos php支持yaf,CentOS环境下给PHP7.0安装yaf扩展

|CentOS环境下给PHP7.0安装yaf扩展在CentOS环境下给PHP7.0安装yaf扩展&#xff0c;首先要知道PHP的安装目录在哪里&#xff0c;以我当前的路径为例&#xff0c;在/usr/local/php目录下。下一步需要下载扩展包&#xff0c;进入http://pecl.php.net/package/yaf寻找符合版本要求的…

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

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

linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...

在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询。blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。要使用这个命令必须安装e2fsprogs软件包。直接使用blkid可列出当前系统中所以已挂载文件系统的类型。默认情…

linux rpm mysql mysql_config,Linux CentOS6 mysql rpm安装

选择操作系统及版本&#xff1a;点击5.6版本链接将下载好的文件上传至服务器下面开始安装&#xff1a;检查是是否有mysql的包# rpm -qa | grep -i mysql删除原有包# yum -y remove mysql-libs*开始安装下载好的三个文件&#xff1a;# rpm -ivh MySQL-server-5.6.38-1.el6.x86_6…

java 可视化_可视化Java 9模块关系

java 可视化正如我在之前的文章中所述 &#xff0c;我已经在Java 9 Jigsaw构建上运行Eclipse Neon了一段时间&#xff0c;并且没有任何问题。 我在周末花了几个小时来修改一些模块化工具的想法。 我为Eclipse Neon写了一个小插件&#xff0c;可视化了各个模块之间的连接。 现…

zybo的linux开发教程,Zybo全栈开发入门教程——连载三:创建Linux设备驱动和应用程序...

作者&#xff1a;Commanderfranz&#xff0c;编译&#xff1a; kenshin通过前面两篇文章我们不仅创建的自定义IP模块还移植了Linux操作系统&#xff0c;今天这篇文章的内容是将这两部分联系起来&#xff0c;其实我们创建的myLed IP相对于Linux操作系统可以是它的一个底层设备&a…

linux 二进制差分工具,打造Android万能的软件更新库

今日科技快讯阿里星球今天在苹果商店发布的更新动态显示&#xff0c;其将在近期停止APP内的音乐服务&#xff0c;用户可以通过新版本内的指引和说明&#xff0c;导出本地音乐。这意味着上线八个月后&#xff0c;阿里星球做出了一个重大决定&#xff1a;停止音乐服务后&#xff…

lambda 分类聚合_使用Java 8 Lambda,流和聚合

lambda 分类聚合总览 在本文中&#xff0c;我们将介绍使用Java 8 lambda&#xff0c;流和聚合来过滤和处理Collection中的对象。 这篇文章中的所有代码都可以在此处的 BitBucket中找到 。 对于此示例&#xff0c;我们将创建许多对象&#xff0c;这些对象代表我们IT基础架构中的…

linux镜像文件不要大于4g,Systemback制做大于4G的Ubuntu系统镜像

1 安装Systemback依此执行以下命令。sudo apt-get updatesudo add-apt-repository ppa:nemh/systembacksudo apt-get update && sudo apt-get install systemback unionfs-fuse安装完成&#xff1a;2 使用Systemback生成镜像文件输入管理员密码&#xff0c;打开后界面以…

黑马2016java_2016年成功的Java开发人员简介

黑马2016java2015年即将结束。 现在该总结过去一年中已完成的工作和未完成的工作。 此外&#xff0c;现在是预测下一个2016年的好时机。 您已经猜到这篇文章是关于2016年理想的Java开发人员的。 我想给你一个惊喜&#xff0c;这次我更改了预测的格​​式。 为了使预测更加客观…

spring一站式开发_Spring开发人员知道的一件事

spring一站式开发在最近的&#xff08;核心&#xff09;Spring框架培训课程中&#xff0c;有人问我&#xff1a;“&#xff08;Java&#xff09;Spring开发人员应该知道的一件事是什么&#xff1f;” 这个问题使我措手不及。 是的&#xff0c;&#xff08;核心&#xff09;Spri…

jax-ws和jax-rs_带有JAX-WS和Spring的Web服务应用程序

jax-ws和jax-rs1.简介 这是一个漫长的等待&#xff0c;但是我最终要发布有关使用Spring创建第一个基于SOAP的Web服务应用程序的教程。 JAX-WS &#xff08;用于XML Web服务的Java API&#xff09;是用于以XML格式创建Web服务的一组API&#xff0c;我们最常将其称为基于SOAP的We…

eclipse开发jsf_在Eclipse上创建JSF / CDI Maven项目

eclipse开发jsf当我在研究JSF和CDI示例时&#xff0c;我认为提到创建JSF和CDI Maven项目所需的步骤会很有用。 您可以找到以下步骤。 工具类 默认情况下&#xff0c;M2E插件随附的Eclipse Luna。 因此&#xff0c;无需自己安装插件。 WildFlye8.x。 从主菜单中选择文件->…

apache camel_Apache Camel的性能调整思路

apache camel时不时地&#xff0c;我会以Camel速度较慢的观点来询问有关优化Camel应用程序的问题。 骆驼只是连接不同系统的粘合剂&#xff0c;路由引擎全部在内存中&#xff0c;并且不需要任何持久状态。 因此&#xff0c;在99&#xff05;的情况下&#xff0c;性能问题是由于…

xmanager linux,教您用xmanager启动Linux上的图形界面程序-Go语言中文社区

对于习惯实体化的开发人员来说&#xff0c;还是界面化用着比较习惯&#xff0c;所以这就涉及到掌握使用Xmanager启动Linux上的图形界面程序&#xff0c;为了方便大家的使用&#xff0c;本集小编就详细的为大家讲解具体操作。具体步骤如下&#xff1a;1、首先下载Xmanager并安装…

android开发 文件分享到应用,Android 实现文件分享功能(共享多个文件)

效果如图&#xff1a;神一样的代码&#xff1a;针对image代码如下&#xff1a;IntentsharenewIntent(Intent.ACTION_SEND);share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));//此处一定要用Uri.fromFile(file),其中file为File类型&#xff0c;否则附件无法发送成功。s…

android 4.4.2截屏方法,android4.4.2 使用 uiautoviewer 截屏报错

1、正常启动后&#xff0c;使用 uiautomatorviewer 没有问题2、由于要使用 uiautomator&#xff0c;每次启动 uiautomator 服务后再使用 uiautomatorviewer 就会图片错误&#xff0c;启动 uiautomator 服务的步骤如下&#xff1a;1、Download jar files from uiautomator jsonr…