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

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

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

    Vincent.Chan‘s Blog

    常用鏈接

    統(tǒng)計

    積分與排名

    網站

    最新評論

    [Jakarta Commons筆記] Commons Collections - Comparator組

    接下來我們會講到輔助類,首先看Comparator組。

     

    ReverseComparator

    ComparatorChain

    NullComparator

    FixedOrderComparator

    ComparatorUtils

     

    其實Comparator這個概念并不是Commons Collections引入的,在標準的Java Collections API中,已經明確定了一個java.util.Comparator接口,只是有很多人并不了解,Commons Collections也只是擴展了這個接口而已。這個java.util.Comparator定義如下核心方法:

     

    public int compare(Object arg0, Object arg1)

     

    傳給它兩個對象,它要告訴我們這兩個對象哪一個在特定的語義下更“大”,或者兩者相等。如果arg0 > arg1,返回大于0的整數;如果arg0 = arg1,返回0;如果arg0 < arg2,返回小于0的整數。

     

    我們看看Commons Collections給我們提供了哪些Comparator的實現(xiàn)類(都在org.apache.commons.collections.comparators包下面):

     

    BooleanComparator – 用于排序一組Boolean對象,指明先true還是先false

    ComparableComparator – 用于排序實現(xiàn)了java.lang.Comparable接口的對象(我們常用的Java類如StringIntegerDateDoubleFileCharacter等等都實現(xiàn)了Comparable接口);

    ComparatorChain – 定義一組Comparator鏈,鏈中的Comparator對象會被依次執(zhí)行;

    FixedOrderComparator – 用于定義一個特殊的順序,對一組對象按照這樣的自定義順序進行排序;

    NullComparator – null值也可參與比較,可以設定為先null或者后null

    ReverseComparator – 將原有的Comparator效果反轉;

    TransformingComparator – 將一個Comparator裝飾為具有Transformer效果的Comparator

     

    // 有關Transformer的內容會在以后的筆記中講到。

     

    以上除了ComparatorChain之外,似乎都是實現(xiàn)一些很基本的比較方法,但是當我們用ComparatorChain將一組Comparator串起來之后,就可以實現(xiàn)非常靈活的比較操作。那么這些Comparator在實際代碼中如何使用呢?看例子:

     

    /** Issue.java */

     

    package sean.study.commons.collections;

     

    import org.apache.commons.lang.builder.ToStringBuilder;

    import org.apache.commons.lang.builder.ToStringStyle;

     

    public class Issue {

       

        private long id;

        private String severity;

        private String owner;

       

        public Issue() {

        }

       

        public Issue(long id, String severity, String owner) {

            this.id = id;

            this.severity = severity;

            this.owner = owner;

        }

       

        public String toString() {

            return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)

                    .append("id", id)

                    .append("severity", severity)

                    .append("owner", owner)

                    .toString();

        }

     

        public long getId() {

            return id;

        }

     

        public void setId(long id) {

            this.id = id;

        }

     

        public String getOwner() {

            return owner;

        }

     

        public void setOwner(String owner) {

            this.owner = owner;

        }

     

        public String getSeverity() {

            return severity;

        }

     

        public void setSeverity(String severity) {

            this.severity = severity;

        }

     

    }

     

    /** ComparatorUsage.java */

     

    package sean.study.commons.collections;

     

    import java.util.Arrays;

    import java.util.Comparator;

     

    import org.apache.commons.beanutils.BeanComparator;

    import org.apache.commons.collections.comparators.ComparatorChain;

    import org.apache.commons.collections.comparators.FixedOrderComparator;

    import org.apache.commons.lang.StringUtils;

     

    public class ComparatorUsage {

     

        public static void main(String[] args) {

            demoComparator();

        }

       

        public static void demoComparator() {

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

            // data setup

            Issue[] issues = new Issue[] {

                    new Issue(15102, "Major", "John"),

                    new Issue(15103, "Minor", "Agnes"),

                    new Issue(15104, "Critical", "Bill"),

                    new Issue(15105, "Major", "John"),

                    new Issue(15106, "Major", "John"),

                    new Issue(15107, "Critical", "John"),

                    new Issue(15108, "Major", "Agnes"),

                    new Issue(15109, "Minor", "Julie"),

                    new Issue(15110, "Major", "Mary"),

                    new Issue(15111, "Enhancement", "Bill"),

                    new Issue(15112, "Minor", "Julie"),

                    new Issue(15113, "Major", "Julie")

            };

            // comparators setup

            String[] severityOrder = {"Critical", "Major", "Minor", "Enhancement"};

            Comparator severityComparator = new FixedOrderComparator(severityOrder);

            ComparatorChain compChain = new ComparatorChain();

            compChain.addComparator(new BeanComparator("owner"));

            compChain.addComparator(new BeanComparator("severity", severityComparator));

            compChain.addComparator(new BeanComparator("id"));

            // sort and display

            Arrays.sort(issues, compChain);

            for (int i = 0; i < issues.length; i++) {

                System.out.println(issues[i]);

            }

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

        }

       

    }

     

    輸出結果為:

     

    ============ demoComparator ============

    Issue[id=15108,severity=Major,owner=Agnes]

    Issue[id=15103,severity=Minor,owner=Agnes]

    Issue[id=15104,severity=Critical,owner=Bill]

    Issue[id=15111,severity=Enhancement,owner=Bill]

    Issue[id=15107,severity=Critical,owner=John]

    Issue[id=15102,severity=Major,owner=John]

    Issue[id=15105,severity=Major,owner=John]

    Issue[id=15106,severity=Major,owner=John]

    Issue[id=15113,severity=Major,owner=Julie]

    Issue[id=15109,severity=Minor,owner=Julie]

    Issue[id=15112,severity=Minor,owner=Julie]

    Issue[id=15110,severity=Major,owner=Mary]

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

     

    我們可以看到,ComparatorChain中的Comparator被依次執(zhí)行,先按name,再按我們自定義的severity次序,再按id,最終我們得到了重新排列的數組。

     

     

    posted on 2005-08-06 08:40 大胃 閱讀(429) 評論(1)  編輯 收藏 收藏至365Key 所屬分類: On Java

    評論

    # re: [Jakarta Commons筆記] Commons Collections - Comparator組  回復   

    ReverseComparator
    ComparatorChain
    NullComparator

    是三個極重要的功能,JDK里面居然不提供標準實現(xiàn)真是太離譜了,幸虧有Commons

    posted on 2006-03-10 23:14 Vincent.Chen 閱讀(213) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 亚洲乱码在线卡一卡二卡新区| 国产亚洲人成在线影院| 成视频年人黄网站免费视频| 亚洲精品无码高潮喷水A片软| 亚洲国产一区二区三区| 久久免费动漫品精老司机| 久久久久亚洲国产| 亚洲AⅤ优女AV综合久久久| 黄色网址在线免费| 亚洲欧美日韩综合久久久| 久久久久亚洲AV成人网人人软件 | 72pao国产成视频永久免费| 亚洲人成影院在线| 韩国免费三片在线视频| 久久国产免费观看精品| 亚洲色欲色欲www在线播放| 国产亚洲综合久久系列| 9久9久女女免费精品视频在线观看| 一级午夜a毛片免费视频| 亚洲手机中文字幕| 国产亚洲精品自在线观看| 毛片免费观看的视频| 免费看男人j放进女人j免费看| 亚洲欧美国产精品专区久久| 久久青草亚洲AV无码麻豆| 免费国产在线观看不卡| 久热中文字幕在线精品免费| a一级毛片免费高清在线| 亚洲综合激情五月丁香六月| 亚洲电影中文字幕| 亚洲国产专区一区| 在线观看无码AV网站永久免费| 18禁超污无遮挡无码免费网站| 亚洲av无码av在线播放| 亚洲色图视频在线观看| 亚洲日韩在线观看| 日韩免费无砖专区2020狼| 最近中文字幕mv免费高清视频8 | 亚洲av无码不卡久久| 亚洲午夜久久久精品影院| 国产日产亚洲系列|