Read Sean

          Read me, read Sean.
          posts - 508, comments - 655, trackbacks - 9, articles - 4

           

          接下來看Predicate

           

          Predicate

          AndPredicate

          OrPredicate

          AllPredicate

          OnePredicate

          NonePredicate

          PredicateUtils

           

          PredicateCommons 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還有我們即將看到的TransformerClosure等都有些類似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它才返回trueAnyPredicate處理多個(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.

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

           

          這里面我首先定義了3個(gè)簡單的Predicatep1判斷對(duì)象是否為String的實(shí)例,p2判斷是否對(duì)象為nullp3是自定義的,判斷是否為數(shù)字字母的組合,并且長度在6~10字符。然后我用AllPredicate將它們組合到一起,成為p4,當(dāng)p1p2p3都滿足時(shí),p4evaluate方法才返回true。利用Predicate我們可以把判斷truefalse的邏輯從特定的業(yè)務(wù)代碼分離出來,以后我們重用也好,重新組裝也好,都是很方便的。

           

          Feedback

          # re: [Jakarta Commons筆記] Commons Collections - Predicate組  回復(fù)  更多評(píng)論   

          2008-05-16 13:28 by nickevin
          好帖永遠(yuǎn)都不缺乏讀者 即使回復(fù)不是很多

          # re: [Jakarta Commons筆記] Commons Collections - Predicate組[未登錄]  回復(fù)  更多評(píng)論   

          2009-02-09 13:39 by 999
          好帖永遠(yuǎn)都不缺乏讀者 即使回復(fù)不是很多

          # re: [Jakarta Commons筆記] Commons Collections - Predicate組  回復(fù)  更多評(píng)論   

          2009-05-08 07:57 by wsguang
          感謝感謝

          # re: [Jakarta Commons筆記] Commons Collections - Predicate組  回復(fù)  更多評(píng)論   

          2009-06-02 16:58 by 林韻
          好帖永遠(yuǎn)都不缺乏讀者 即使回復(fù)不是很多
          主站蜘蛛池模板: 浦县| 通州市| 高要市| 新闻| 吉林省| 泊头市| 长宁区| 南平市| 崇仁县| 米林县| 蓬莱市| 安乡县| 革吉县| 广水市| 长治县| 仪征市| 新宾| 松原市| 邵武市| 黑龙江省| 德清县| 名山县| 澄城县| 巴青县| 寻甸| 蓬安县| 宣恩县| 灵石县| 元江| 定南县| 鞍山市| 通榆县| 饶平县| 洞头县| 中山市| 大埔区| 铁力市| 河源市| 宣威市| 东乡| 博野县|