Guava functional -- Predicate
发布日期:2021-06-29 12:51:44 浏览次数:2 分类:技术文章

本文共 3018 字,大约阅读时间需要 10 分钟。

Guava全文介绍地址:Google Guava

这次主要介绍是的是com.google.common.base.Predicate.在JDK8之前Java是不能使用函数式编程的,但是Guava给予了我们这样的能力。Predicate就是这样其中的一个类。而且大多数时候Predicate是和Predicates是组合来使用的,Predicate大概有以下用法:
1. Predicate检查传递对象是否满足给定的条件
2. Predicate主要是使用Iterables, Iterators, Collections2等类的filter方法来过滤集合
3. Predicate通常也用Iterables.all()来检测集合中的所有元素满足指定的条件
4. Predicates这个类提供了实用的方法,并且允许多个Predicate组成一样Predicate。这点与Function有点像。
我们首先来看看这个接口的方法。

boolean apply(T input)返回输入的值应用predicate后的结果boolean equals(Object object)判断另一个对象是否等于这个predicate.

这个接口与Function有点像,只不过Function返回的是对应的值,而Predicate是返回是否满足条件,返回值为boolean类型。

下面我们根据几个小例子来看这个类的用法。
基础类:

@Data@NoArgsConstructor@AllArgsConstructor@ToStringpublic class User implements Serializable {
/** 身份证号 */ private long idCard; /** 姓名 */ private String name; /** age */ private int age;}

1、判断年龄是否都大于25

@Test    public void shouldUseCustomPredicate(){        // given        User user1 = new User(1L, "carl",26);        User user2 = new User(2L, "kevin", 24);        User user3 = new User(3L, "erin", 25);        Predicate
userAgePredicate = new Predicate
() { @Override public boolean apply(User input) { return input.getAge() > 25; } }; // when boolean allUserAgeBeyond25 = Iterables.all(Lists.newArrayList(user1, user2, user3), userAgePredicate); // then assertFalse(allUserAgeBeyond25); }

2、多个Predicate通过Predicates的and(),or(),not()组合使用

@Test    public void shouldComposeTwoPredicates(){        // given        User user1 = new User(1L, "carl",26);        User user2 = new User(2L, "kevin", 24);        Predicate
userAgePredicate = new Predicate
() { @Override public boolean apply(User input) { return input.getAge() > 25; } }; Predicate
userNamePredicate = new Predicate
() { @Override public boolean apply(User input) { return "carl".equals(input.getName()); } }; Predicate
nameAndAgePredicate = Predicates.and(userAgePredicate, userNamePredicate); // when boolean carlAgeBeyond25 = Iterables.all(Lists.newArrayList(user1, user2), nameAndAgePredicate); // then assertFalse(carlAgeBeyond25); }

3、Predicates类的containsPattern方法用于创建条件使用正则表达式

@Test    public void shouldCheckPattern() throws Exception {        // given        Predicate
twoDigitsPredicate = Predicates.containsPattern("\\d\\d"); // then assertThat(twoDigitsPredicate.apply("Hello world 40")).isTrue(); }

4、Predicate类的in方法,用于判断集合中包含对象

@Test    public void shouldFindObjectInCollection() throws Exception {        // given        Predicate elevenInCollectionPredicate = Predicates.in(Arrays.asList(11L, 22L, 33L, 44L));        // then        assertThat(elevenInCollectionPredicate.apply(11L)).isTrue();    }

以上差不多就是Predicate类的使用方法,至于其它用法。就看大家去挖掘了。

转载地址:https://carlzone.blog.csdn.net/article/details/51713380 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:CAS SSO 4.0.x 用户数据库验证
下一篇:Guava functional -- Function

发表评论

最新留言

不错!
[***.144.177.141]2024年05月01日 01时12分23秒