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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券