A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周志龙 中级黑马   /  2013-10-8 18:15  /  1252 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

项目中经常需要用到比如地区列表按照中文的拼音首字母排序,但是有时候获取到的地区列表是对象的形式,有地区id,地区名称两个属性。这里主要涉及到两个技术点:

1、对象按属性排序;2、中文按拼音首字母排序。下面给出自己整理好的demo:
  1. import java.text.Collator;  
  2. import java.util.ArrayList;  
  3. import java.util.Collections;  
  4. import java.util.Comparator;  
  5.    
  6. import org.apache.commons.beanutils.BeanComparator;  
  7. import org.apache.commons.collections.ComparatorUtils;  
  8. import org.apache.commons.collections.comparators.ComparableComparator;  
  9. import org.apache.commons.collections.comparators.ComparatorChain;  
  10.    
  11. public class CompareTipA  {  
  12.     private int  id;  
  13.     private String  name;  
  14.     private String age;  
  15.    
  16.     @SuppressWarnings("unchecked")  
  17.     public static void main(String []args) {  
  18.         ArrayList<Object> list = new ArrayList<Object>();  
  19.         list.add(new CompareTipA(1,"3","五"));  
  20.         list.add(new CompareTipA(2,"1","六"));  
  21.         list.add(new CompareTipA(5,"5","二"));  
  22.         list.add(new CompareTipA(3,"4","四"));  
  23.         list.add(new CompareTipA(8,"4","四"));  
  24.         list.add(new CompareTipA(4,"2","一"));  
  25.    
  26.         Comparator mycmp = ComparableComparator.getInstance();  
  27.         mycmp = ComparatorUtils.nullLowComparator(mycmp);  //允许null     
  28.         mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序     
  29.            
  30.         ArrayList<Object> sortFields = new ArrayList<Object>();  
  31.         Comparator<Object> comparator=Collator.getInstance(java.util.Locale.CHINA);  
  32.    
  33.         sortFields.add(new BeanComparator("name",comparator));  //name正序 (主)  
  34.         sortFields.add(new BeanComparator("id", mycmp));     //id逆序  (副)  
  35.         ComparatorChain multiSort = new ComparatorChain(sortFields);  
  36.         Collections.sort(list,multiSort);  
  37.            
  38.         for (int i =0;i<list.size();i++) {  
  39.             System.out.println(list.get(i));    //输出  
  40. /*         [id=5,name=二,age=5]
  41.             [id=2,name=六,age=1]
  42.             [id=8,name=四,age=4]
  43.             [id=3,name=四,age=4]
  44.             [id=1,name=五,age=3]
  45.             [id=4,name=一,age=2]*/
  46.         }  
  47.     }  
  48.    
  49.     public CompareTipA(int id, String age,String name) {  
  50.         this.id = id;  
  51.         this.name = name;  
  52.         this.age = age;  
  53.     }  
  54.    
  55.     public int getId() {  
  56.         return this.id;  
  57.     }  
  58.    
  59.     public void setId(int id) {  
  60.         this.id = id;  
  61.     }  
  62.    
  63.     public String getName() {  
  64.         return this.name;  
  65.     }  
  66.    
  67.     public void setName(String name) {  
  68.         this.name = name;  
  69.     }  
  70.    
  71. //    public int compareTo(Object o) {  
  72. //        return this.comparator.compare(this, o);  
  73. //    }  
  74.    
  75.     public String toString() {  
  76.         return "[id=" + this.id + ",name=" + this.name +",age=" + this.age +"]";  
  77.     }  
  78.    
  79.     public String getAge() {  
  80.         return age;  
  81.     }  
  82.    
  83.     public void setAge(String age) {  
  84.         this.age = age;  
  85.     }  
  86. }
复制代码
注意:需要导入的三个包:commons-beanutils-1.8.3.jar     commons-collections-3.2.1.jar       commons-logging-1.1.3.jar
commons-collections包不能用官网上的4.0版本,因为从源码中可以看见commons-beanutils包调用的就是commons-collections3.2版本的api,4.0的没兼容;commons-logging包也是commons-beanutils包所需要的。

1 个回复

倒序浏览
沙发拿了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马