天天看點

按照指定對象的成員變量排序

有一個list<commondictionary>,

commondictionary的結構:

按照指定對象的成員變量排序

/** 

     * 主鍵id 

     */  

    private long id;  

    /** 

     * 組id 

    private string groupid;  

     * 鍵<br />不能取值為key,因為key是關鍵字 

    private string key2;  

     * 值 

    private string value;  

     * 描述 

    private string description;  

按照指定對象的成員變量排序

我需要對key2進行排序.

說明:

(1)key2的值是唯一的,不重複;

(2)key2的所有取值都已知.

按照什麼方式排序呢?

按照指定對象的成員變量排序

"company_n","product_stand","production_no","registration_c","production_addr","company_web"  

 排序前:

13company_name武漢市

17company_website公司網址

14product_standard産品标準aa

18production_address生産位址

15production_no生産證号

16registration_certificate_number注冊證号drfdf

---------------------------------

排序後:

測試方法如下:

按照指定對象的成員變量排序

@test  

    public void tst_77(){  

        list<commondictionary> list=dictionaryparam.getlist(constant2.dictionary_group_anticounterfeit_code);  

        string ordertitles[]=new string[]{"company_n","product_stand","production_no","registration_c","production_addr","company_web"};  

        for(int i=0;i<list.size();i++){  

            commondictionary commondictionary33=list.get(i);  

            system.out.println(commondictionary33.getid()+"\t"+commondictionary33.getkey2()+"\t"+commondictionary33.getvalue());  

        }  

        collections.sort(list,new systemhwutil. arraylistcomparator(ordertitles,"key2"));  

        system.out.println("---------------------------------");  

    }  

 執行結果:

按照指定對象的成員變量排序

systemhwutil. arraylistcomparator 實作如下:

按照指定對象的成員變量排序

public static class arraylistcomparator implements comparator{  

        /*** 

         * 排序的依據 

         */  

        private string titles[];  

         * 對哪個列進行排序 

        private string comparedproperty;  

        public arraylistcomparator(string[] titles,string comparedproperty) {  

            super();  

            this.titles = titles;  

            this.comparedproperty=comparedproperty;  

        public int compare(object o1, object o2) {  

            if(null!=o1&&null!=o2)  

            {  

                try {  

                    if(systemhwutil.indexofarr(titles,(string)reflecthwutils.getobjectvalue(o1, comparedproperty)   ) >  

                    systemhwutil.indexofarr(titles,(string)reflecthwutils.getobjectvalue(o2, comparedproperty))){  

                        return 1/*大于*/;  

                    }else {  

                        return -1/*小于*/;  

                    }  

                } catch (securityexception e) {  

                    e.printstacktrace();  

                } catch (nosuchfieldexception e) {  

                } catch (illegalargumentexception e) {  

                } catch (illegalaccessexception e) {  

                }  

            }  

            return 0/*等于*/;  

 systemhwutil.indexofarr 參考http://hw1287789687.iteye.com/blog/2145187

注意:

(1)titles中的元素不要有重複;

(2)arraylistcomparator 可應用于所有的object,應該它沒有與具體的類關聯,而是通過反射來擷取成員變量的值.

關于反射,可以參閱:http://hw1287789687.iteye.com/blog/2124280

遺留問題:

如何高效率地過濾string[]:{1,2,3,2}-->{1,2,3};