专栏首页ImportSourceJava8的Predicate,让代码更简洁

Java8的Predicate,让代码更简洁

在我们的代码中,经常会编写是否为真的代码,比如用户名是否存在,客户是否存在等。类似如下代码:

public boolean exist(Long userId){

...

return false;

}

这样做已经很棒了。但你需要了解一个java8的Predicate。通过Predicate可以让你的代码更加的简洁。学习下Predicate吧。

Predicate是一个函数接口。它包含了一个接口方法和三个默认方法以及一个静态方法。

Predicate表示断定和假设的意思。

test

test接口就是为了让你实现判断的效果。最原始的就是去实现这个接口,然后写我们的判断逻辑,如下:

你也看到有一部分灰色的代码,告诉我们这个可以被优化为lambda表达式,如下:

你也可以把Predicate的实现单独抽离成一个实现类,方便重用。

Predicate不仅可以单独在代码中使用,也可以在测试代码中用来做判断,同时还可以被用在Stream的filter中,用来做过滤。

使用Predicate可以让你的判断逻辑代码更加的简洁和解耦,增加了可读性、可测试性,同时符合DRY原则

DRY原则:(don’t repeat yourself): writing code more than once is not a good fit for a lazy developer ;)It also makes your software more difficult to maintain because it becomes harder to make your business logic consistent。一句话:别写重复代码

现在你的代码看起来已经很炫酷了。但别急,接下来的几个操作会让你的代码看起来更加的清晰而明了。当你写了一个“大于20”的条件时,此时需求变了,需要一个新的条件20<x<30。

此时你有两条路,一条路是直接修改Predicate的test方法中的逻辑。还有一条路是新建一个新的Predicate,然后和现有的组装成为一个新的Predicate。第一条路相信你经常走,接下来就来介绍下第二条路:组装。

and

首先新建一个LessThan30Predicate:

然后和上面的CustomPredicate用and方法组装成一个新的Predicate。如下:

输出结果:

or

同样也可以使用or来组装。

输出结果:

negate

你也可以使用negate方法把现有的Predicate变为否定的Predicate。

输出结果:

本文分享自微信公众号 - ImportSource(importsource),作者:贺卓凡

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 服务之美-读《微服务设计》笔记全集(一)

    最近在微信读书上读《微服务设计》一书,目前读了30%多了,其间想法有点多,现分享给大家。

    ImportSource
  • 设计模式的那些事儿-(概要)

    相信你看了很多关于设计模式的书籍或文章。里边一定会有咖啡果汁之类或者画圆或矩形的例子,或者其他的我们平时就无法一下子用到的具体场景。 ...

    ImportSource
  • 自由软件永远是自由的,github你可以继续使用,只要不是用于搞原子弹

    由于贸易战的影响,华为被谷歌suspend了自己的一些业务,但开源的除外。以下是一些报道的截图:

    ImportSource
  • java8第二篇

    Predicate断言式,判断是否符合指定的条件。个人感觉这个函数式接口,常用于集合的过滤操作,我们可以看下其提供的方法都有哪些。

    码农王同学
  • 红蓝对抗 | 内网渗透实战技巧

    本文章是关于内网方面渗透技巧的一个文章,用的环境是VulnStack1,VulnStack是红日安全团队出的一个内网渗透的靶机环境,感谢红日团队

    天钧
  • 一个轻量小巧的集成在vs里的代码生成工具

    liberate是一个集成在vs里的轻量小巧的代码生成框架,当然如果您已经熟练运用CodeSmith了,您就不用考虑它了。不过也可以把它作为学习vsx...

    明年我18
  • 特征工程(二) :文本数据的展开、过滤和分块

    Emma knocked on the door. No answer. She knocked again and waited. There was a l...

    机器学习AI算法工程
  • 机器学习模型的度量选择(下)

    在第一篇中,我们讨论了回归中使用的一些重要指标、它们的优缺点以及用例。这一部分将集中讨论分类中常用的度量,以及在具体的背景中应该选择哪种。

    磐创AI
  • Juniper表示期待成为400GbE的第一人

    Juniper希望成为第一家在路由和交换产品组合中提供400GbE的厂商。Juniper表示计划在其PTX IP传输系列、QFX数据中心系列和MX WAN系列中...

    SDNLAB
  • 内网渗透常用端口转发与代理工具枚举

    lcx.exe是一个端口转发工具,有Windows版和Linux版两个版本,Windows版是lcx.exe,Linux版为portmap,

    字节脉搏实验室

扫码关注云+社区

领取腾讯云代金券