有一個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};