接下來看Predicate組
Predicate
AndPredicate
OrPredicate
AllPredicate
OnePredicate
NonePredicate
PredicateUtils
Predicate是Commons Collections中定義的一個(gè)接口,可以在org.apache.commons.collections包中找到,。其中定義的方法簽名如下:
public boolean evaluate(Object object)
它以一個(gè)Object對(duì)象為參數(shù),,處理后返回一個(gè)boolean值,檢驗(yàn)?zāi)硞€(gè)對(duì)象是否滿足某個(gè)條件,。其實(shí)這個(gè)Predicate以及上一篇筆記提到的Comparator還有我們即將看到的Transformer和Closure等都有些類似C/C++中的函數(shù)指針,,它們都只是提供簡單而明確定義的函數(shù)功能而已。
跟其他組類似,,Commons Collections也提供了一組定義好的Predicate類供我們使用,,這些類都放在org.apache.commons.collections.functors包中。當(dāng)然,,我們也可以自定義Predicate,,只要實(shí)現(xiàn)這個(gè)Predicate接口即可。在Commons Collections中我們也可以很方便使用的一組預(yù)定義復(fù)合Predicate,,我們提供2個(gè)或不定數(shù)量個(gè)Predicate,,然后交給它,它可以幫我們處理額外的邏輯,如AndPredicate處理兩個(gè)Predicate,,只有當(dāng)兩者都返回true它才返回true,;AnyPredicate處理多個(gè)Predicate,當(dāng)其中一個(gè)滿足就返回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));
}
}
輸出結(jié)果如下:
============ demoPredicates ============
Is 'ABCD1234' a valid input? yes.
========================================