<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

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

    [Jakarta Commons筆記] Commons Collections - Predicate組

    Posted on 2005-08-06 08:43 laogao 閱讀(3403) 評論(4)  編輯  收藏 所屬分類: On Java

     

    接下來看Predicate

     

    Predicate

    AndPredicate

    OrPredicate

    AllPredicate

    OnePredicate

    NonePredicate

    PredicateUtils

     

    PredicateCommons Collections中定義的一個接口,可以在org.apache.commons.collections包中找到。其中定義的方法簽名如下:

     

    public boolean evaluate(Object object)

     

    它以一個Object對象為參數,處理后返回一個boolean值,檢驗某個對象是否滿足某個條件。其實這個Predicate以及上一篇筆記提到的Comparator還有我們即將看到的TransformerClosure等都有些類似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,當p1p2p3都滿足時,p4evaluate方法才返回true。利用Predicate我們可以把判斷truefalse的邏輯從特定的業務代碼分離出來,以后我們重用也好,重新組裝也好,都是很方便的。

     

    Feedback

    # re: [Jakarta Commons筆記] Commons Collections - Predicate組  回復  更多評論   

    2008-05-16 13:28 by nickevin
    好帖永遠都不缺乏讀者 即使回復不是很多

    # re: [Jakarta Commons筆記] Commons Collections - Predicate組[未登錄]  回復  更多評論   

    2009-02-09 13:39 by 999
    好帖永遠都不缺乏讀者 即使回復不是很多

    # re: [Jakarta Commons筆記] Commons Collections - Predicate組  回復  更多評論   

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

    # re: [Jakarta Commons筆記] Commons Collections - Predicate組  回復  更多評論   

    2009-06-02 16:58 by 林韻
    好帖永遠都不缺乏讀者 即使回復不是很多
    主站蜘蛛池模板: 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲精品456播放| 在线观看特色大片免费网站| 亚洲av日韩av高潮潮喷无码| 67pao强力打造高清免费| 亚洲色中文字幕在线播放| 亚洲国产精品成人AV无码久久综合影院| 国产精品极品美女自在线观看免费| 亚洲91av视频| 亚洲无码精品浪潮| 久久精品a一国产成人免费网站| 大片免费观看92在线视频线视频| 亚洲欧洲日产韩国在线| 亚洲精品第一国产综合精品99| 99久久精品国产免费| 久久嫩草影院免费看夜色| 猫咪免费观看人成网站在线| 日韩亚洲Av人人夜夜澡人人爽 | 亚洲AV成人影视在线观看| 久久精品国产亚洲av麻豆 | 最近中文字幕完整免费视频ww| 性色av极品无码专区亚洲| 亚洲AV美女一区二区三区| 全亚洲最新黄色特级网站 | 免费在线黄色网址| 啦啦啦手机完整免费高清观看| 99视频在线免费| 最近中文字幕电影大全免费版| eeuss免费影院| 亚洲免费在线观看| 日韩成人毛片高清视频免费看| 亚洲午夜无码久久| 国产精品亚洲专区在线观看| 久久久久亚洲精品日久生情| 亚洲精品乱码久久久久久按摩| 4338×亚洲全国最大色成网站| 亚洲午夜国产片在线观看| 亚洲av无码成人精品区| 免费jlzzjlzz在线播放视频| 国产亚洲精品AA片在线观看不加载| www亚洲一级视频com|