作者:微信小助手
发布时间:2019-02-02T22:12:47
在我们的代码中,经常会编写是否为真的代码,比如用户名是否存在,客户是否存在等。类似如下代码:
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。
输出结果: