jakarta.commons包中BeanUtils以及ComparatorUtils的使用

轉自:http://ttitfly.javaeye.com/blog/132900


1.BeanUtils基本用法:

java 代碼
  1. package com.beanutil;   
  2.   
  3. import java.util.Map;   
  4.   
  5. public class User {   
  6.   
  7.     private Integer id;   
  8.     private Map map;   
  9.     private String username;   
  10.     public Integer getId() {   
  11.         return id;   
  12.     }   
  13.     public void setId(Integer id) {   
  14.         this.id = id;   
  15.     }   
  16.     public Map getMap() {   
  17.         return map;   
  18.     }   
  19.     public void setMap(Map map) {   
  20.         this.map = map;   
  21.     }   
  22.     public String getUsername() {   
  23.         return username;   
  24.     }   
  25.     public void setUsername(String username) {   
  26.         this.username = username;   
  27.     }   
  28.        
  29.        
  30. }  
java 代碼
  1. public class Order {   
  2.     private User user;   
  3.     private Integer id;   
  4.     private String desc;   
  5.     public String getDesc() {   
  6.         return desc;   
  7.     }   
  8.     public void setDesc(String desc) {   
  9.         this.desc = desc;   
  10.     }   
  11.     public Integer getId() {   
  12.         return id;   
  13.     }   
  14.     public void setId(Integer id) {   
  15.         this.id = id;   
  16.     }   
  17.     public User getUser() {   
  18.         return user;   
  19.     }   
  20.     public void setUser(User user) {   
  21.         this.user = user;   
  22.     }   
  23.        
  24.   
  25. }  

 

java 代碼
  1.   
  2. import java.util.HashMap;   
  3. import java.util.Map;   
  4.   
  5. import org.apache.commons.beanutils.BeanUtils;   
  6.   
  7. public class Test {   
  8.        
  9.     private User user = new User();   
  10.     private Order order1 = new Order();   
  11.     private Order order2 = new Order();   
  12.     private Order order3 = new Order();   
  13.     private Map map = new HashMap();   
  14.     private User user1 = new User();   
  15.   
  16.     public Test(){   
  17.         init();   
  18.     }   
  19.     public static void main(String[] args) throws Exception{   
  20.         Test test = new Test();   
  21.         //輸出某個對象的某個屬性   
  22.         System.out.println(BeanUtils.getProperty(test.user, "username"));   
  23.            
  24.         //輸出某個對象的內嵌屬性,只要使用點號分隔   
  25.         System.out.println(BeanUtils.getProperty(test.order1, "user.username"));   
  26.            
  27.         //BeanUtils還支持List和Map類型的屬性,對於Map類型,則需要以"屬性名(key值)"的   
  28.         //對於Indexed,則爲"屬性名[索引值]",注意對於ArrayList和數組都可以用一樣的方式進行操作   
  29.         System.out.println(BeanUtils.getProperty(test.user1, "map(order2).desc"));   
  30.   
  31.         //拷貝對象的屬性值   
  32.         User tempUser = new User();   
  33.         BeanUtils.copyProperties(tempUser, test.user1);   
  34.            
  35.         System.out.println(tempUser.getUsername());   
  36.         System.out.println(tempUser.getId());   
  37.            
  38.            
  39.            
  40.            
  41.     }   
  42.        
  43.     //初始化   
  44.     public void init(){   
  45.            
  46.            
  47.         user.setId(0);   
  48.         user.setUsername("zhangshan");   
  49.            
  50.            
  51.         order1.setId(1);   
  52.         order1.setDesc("order1");   
  53.         order1.setUser(user);   
  54.            
  55.            
  56.            
  57.         order2.setId(2);   
  58.         order2.setDesc("order2");   
  59.         order2.setUser(user);   
  60.            
  61.            
  62.         order3.setId(3);   
  63.         order3.setDesc("order3");   
  64.         order3.setUser(user);   
  65.            
  66.            
  67.         map.put("order1", order1);   
  68.         map.put("order2", order2);   
  69.         map.put("order3", order3);   
  70.            
  71.            
  72.         user1.setId(1);   
  73.         user1.setUsername("lisi");   
  74.         user1.setMap(map);   
  75.            
  76.            
  77.     }   
  78. }   

 

輸出結果爲:

zhangshan
zhangshan
order2
lisi
1

 

2. BeanCompartor 動態排序

A:動態設定Bean按照哪個屬性來排序,而不再需要再實現bean的Compare接口進行復雜的條件判斷

java 代碼
  1. //動態設定Bean按照哪個屬性來排序,而不再需要再實現bean的Compare接口進行復雜的條件判斷   
  2.         List list = new ArrayList();   
  3.            
  4.         list.add(test.order2);   
  5.         list.add(test.order1);   
  6.         list.add(test.order3);   
  7.            
  8.         //未排序  
  9.         for(Order order : list){   
  10.             System.out.println(order.getId());   
  11.         }   
  12.         //排序  
  13.         Collections.sort(list, new BeanComparator("id"));   
  14.         for(Order order : list){   
  15.             System.out.println(order.getId());   
  16.         }  

 

B:支持多個屬性的複合排序

java 代碼
  1. //支持多個屬性的複合排序   
  2.         List  sortFields = new ArrayList();    
  3.         sortFields.add(new BeanComparator("id"));   
  4.         sortFields.add(new BeanComparator("desc"));   
  5.         ComparatorChain multiSort = new ComparatorChain(sortFields);   
  6.         Collections.sort(list, multiSort);   
  7.            
  8.         for(Order order : list){   
  9.             System.out.println(order.getId());   
  10.         }  

 

C:使用ComparatorUtils進一步指定排序條件

上面的排序遇到屬性爲null就會拋出異常, 也不能設定升序還是降序。
  不過,可以藉助commons-collections包的ComparatorUtils
  BeanComparator,ComparableComparator和ComparatorChain都是實現了Comparator這個接口

java 代碼
  1. //上面的排序遇到屬性爲null就會拋出異常, 也不能設定升序還是降序。   
  2.         //不過,可以藉助commons-collections包的ComparatorUtils   
  3.         //BeanComparator,ComparableComparator和ComparatorChain都是實現了Comparator這個接口   
  4.         Comparator mycmp = ComparableComparator.getInstance();      
  5.         mycmp = ComparatorUtils.nullLowComparator(mycmp);  //允許null      
  6.         mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序      
  7.         Comparator cmp = new BeanComparator("id", mycmp);   
  8.         Collections.sort(list, cmp);   
  9.         for(Order order : list){   
  10.             System.out.println(order.getId());   
  11.         } 
Compartor更多用法,請參見 http://blog.csdn.net/kongqz/archive/2008/09/22/2961750.aspx
附註:關於nullLowComparator的api說明

nullLowComparator

public static java.util.Comparator nullLowComparator(java.util.Comparator comparator)
Gets a Comparator that controls the comparison of null values.

The returned comparator will consider a null value to be less than any nonnull value, and equal to any other null value. Two nonnull values will be evaluated with the given comparator.

Parameters:
comparator - the comparator that wants to allow nulls
Returns:
a version of that comparator that allows nulls
See Also:
NullComparator

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章