`

Commons Collections - Predicate

阅读更多

 

接下来看Predicate组

 

Predicate

AndPredicate

OrPredicate

AllPredicate

OnePredicate

NonePredicate

PredicateUtils

 

Predicate是Commons Collections中定义的一个接口,可以在org.apache.commons.collections包中找到。其中定义的方法签名如下:

 

public boolean evaluate(Object object)

 

它以一个Object对象为参数,处理后返回一个boolean值,检验某个对象是否满足某个条件。其实这个Predicate以及上一篇笔记提到的Comparator还有我们即将看到的Transformer和Closure等都有些类似C/C++中的函数指针,它们都只是提供简单而明确定义的函数功能而已。

 

跟其他组类似,Commons Collections也提供了一组定义好的Predicate类供我们使用,这些类都放在org.apache.commons.collections.functors包中。当然,我们也可以自定义Predicate,只要实现这个Predicate接口即可。在Commons Collections中我们也可以很方便使用的一组预定义复合Predicate,我们提供2个或不定数量个Predicate,然后交给它,它可以帮我们处理额外的逻辑,如AndPredicate处理两个Predicate,只有当两者都返回true它才返回true;AnyPredicate处理多个Predicate,当其中一个满足就返回true,等等。

 

看看具体的代码中如何使用这些Predicate吧: 

package sean.study.commons.collections;

 

import org.apache.commons.collections.Predicate;

import org.apache.commons.collections.PredicateUtils;

import org.apache.commons.collections.functors.InstanceofPredicate;

import org.apache.commons.collections.functors.NotNullPredicate;

import org.apache.commons.lang.BooleanUtils;

import org.apache.commons.lang.StringUtils;

 

public class PredicateUsage {

 

    public static void main(String[] args) {

        demoPredicates();

    }

 

    public static void demoPredicates() {

        System.out.println(StringUtils.center(" demoPredicates ", 40, "="));

        Predicate p1 = new InstanceofPredicate(String.class);

        Predicate p2 = NotNullPredicate.getInstance();

        Predicate p3 = new Predicate() {

            public boolean evaluate(Object obj) {

                String str = (String) obj;

                return StringUtils.isAlphanumeric(str)

                    && str.length() >= 6

                    && str.length() <= 10;

            }

        };

        Predicate p4 = PredicateUtils.allPredicate(new Predicate[]{p1, p2, p3});                String input ="ABCD1234";

        Object[] raw = new Object[] {

            "Is '",

            input,

            "' a valid input? ",

            BooleanUtils.toStringYesNo(p4.evaluate(input)),

            "."

        };

        System.out.println(StringUtils.join(raw));

        System.out.println(StringUtils.repeat("=", 40));

    }

 

}

 

输出结果如下:

 

============ demoPredicates ============

Is 'ABCD1234' a valid input? yes.

========================================

 

这里面我首先定义了3个简单的Predicate,p1判断对象是否为String的实例,p2判断是否对象为null,p3是自定义的,判断是否为数字字母的组合,并且长度在6~10字符。然后我用AllPredicate将它们组合到一起,成为p4,当p1、p2、p3都满足时,p4的evaluate方法才返回true。利用Predicate我们可以把判断true或false的逻辑从特定的业务代码分离出来,以后我们重用也好,重新组装也好,都是很方便的。


分享到:
评论

相关推荐

    commons-collections-3.2.2-bin.tar包

    `commons-collections-3.2.2-bin.tar`是一个压缩包,它包含了Apache Commons Collections库的3.2.2版本。这个库是Java编程语言中一个非常重要的工具集,专门用于处理集合框架,如列表、映射、集合等。Apache Commons...

    commons-collections-3.2.1-bin

    Apache Commons Collections是一个Java库,它提供了对集合框架的扩展,增加了许多实用功能,极大地丰富了Java编程中的数据处理能力。这个"commons-collections-3.2.1-bin"压缩包包含的是Apache Commons Collections ...

    jdbc用到的jar包(commons-collections-3.1.jar、commons-dbcp-1.2.2.jar、commons-pool.jar)

    例如,你可以利用Collections的`transform()`方法将查询结果进行转换,或者使用`Predicate`接口创建自定义过滤规则。 2. **Apache Commons DBCP** (`commons-dbcp-1.2.2.jar`): 这是Apache Commons项目的一个子...

    commons-collections4-4.1.jar

    Commons Collections是Apache软件基金会开发的一个Java库,主要提供对集合框架的增强和扩展。这个库是Java标准集合接口的补充,增加了许多实用的功能,提高了代码的可读性和效率。"commons-collections4-4.1.jar"是...

    commons-collections-3.2.1.rar代码及原jar文件

    Apache Commons Collections是一个强大的Java集合框架扩展库,它提供了对Java内置集合类的增强功能和新的数据结构。在本文中,我们将深入探讨`commons-collections-3.2.1`版本的相关知识点。 首先,`commons-...

    commons-collections4-4.2-bin

    Apache Commons Collections是一个强大的Java集合框架扩展库,它为Java的内置集合类提供了丰富的功能增强。这个"commons-collections4-4.2-bin"是Apache Commons Collections的第4版的第2次更新,是一个二进制分发包...

    commons-collections4-4.1-bin.zip

    Apache Commons Collections是一个强大的Java集合框架扩展库,它提供了大量的接口和类来增强Java的内置集合。这个"commons-collections4-4.1-bin.zip"压缩包包含了Apache Commons Collections的源码和jar包,版本为...

    commons-collections-3 jar

    《Apache Commons Collections 3详解》 Apache Commons Collections(简称Collections)是Apache软件基金会开发的一个Java类库,它为Java集合框架提供了丰富的扩展和实用工具。本文将深入探讨`commons-collections-...

    commons-collections4-4.4-bin.tar.gz

    Apache Commons Collections 4.4是Java开发人员常用的一个开源库,它是Apache软件基金会的一个项目,提供了许多实用的集合框架扩展,极大地丰富了Java标准库中集合类的功能。这个版本是4.4,属于项目的最新稳定版,...

    commons-collections4-4.0

    Apache Commons Collections是一个非常重要的Java库,它为Java集合框架提供了大量的扩展和实用工具。这个库被称为"commons-collections4-4.0",表明它是Apache Commons Collections的第4个主要版本,版本号为4.0。这...

    commons-collections-3.1.zip

    8. `org.apache.commons.collections.functors`:这个包提供了各种函数对象(Functor),它们可以作为谓词(Predicate)、工厂(Factory)、转换器(Transformer)等,用于实现函数式编程的模式。 9. `org.apache....

    Apache commons-collections4-4.1 Src压缩包

    Apache Commons Collections是一个强大的Java库,它是Apache软件基金会的一部分,专门用于增强Java的集合框架。这个库提供了大量的实用工具类和算法,扩展了Java标准库中集合接口的功能,使得开发人员可以更加高效、...

    commons-collections4-4.4-bin.zip

    Apache Commons Collections是一个Java库,它提供了对集合框架的扩展,增加了许多实用功能。这个库的主要目标是增强Java标准集合接口的灵活性、性能和功能性。在"commons-collections4-4.4-bin.zip"中,我们获得了...

    commons-collections

    "commons-collections"是Apache软件基金会的一个开源项目,它提供了一系列强大的、实用的集合框架扩展,使得在Java编程中处理集合对象变得更加方便和灵活。这个jar包包含了多种实用的工具类和接口,扩展了Java标准...

    commons-collections4-4.0-bin.zip

    Apache Commons Collections 4.0是Java开发中一个非常重要的库,它提供了大量的集合框架扩展,增强了Java标准库中集合类的功能。这个版本的压缩包"commons-collections4-4.0-bin.zip"包含了Apache Commons ...

    commons-collections.rar

    Apache Commons Collections是一个非常重要的Java库,它为Java标准库中的`java.util`包提供了大量扩展,增加了许多实用的集合类、迭代器、映射和转换功能。这个库被广泛用于提高开发效率,尤其是在处理和操作数据...

    commons-collection

    《Apache Commons Collections详解》 Apache Commons Collections是Java社区中一个非常重要的开源库,它提供了大量对集合对象操作的工具类和算法,极大地丰富了Java集合框架的功能。在本篇文章中,我们将深入探讨这...

    Apache commons jar包常用类讲解--Jakarta Commons 学习.pdf

    本文将详细介绍几个常用的Apache Commons组件:commons-lang、commons-beanutils和commons-collections。 #### 1. Commons Lang Commons Lang库提供了对Java语言及其标准库的扩展,主要聚焦于字符串处理、对象操作...

    apache工具类

    `CollectionUtils` 是Apache Commons Collections库的一部分,它提供了许多集合操作的便利方法,可以处理List、Set、Map等各种集合类型。下面是一些常用功能: - `isEmpty(Collection coll)`: 检查集合是否为空或...

Global site tag (gtag.js) - Google Analytics