轉自:http://ttitfly.javaeye.com/blog/132900
1.BeanUtils基本用法:
- package com.beanutil;
- import java.util.Map;
- public class User {
- private Integer id;
- private Map map;
- private String username;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public Map getMap() {
- return map;
- }
- public void setMap(Map map) {
- this.map = map;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
- public class Order {
- private User user;
- private Integer id;
- private String desc;
- public String getDesc() {
- return desc;
- }
- public void setDesc(String desc) {
- this.desc = desc;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- }
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.commons.beanutils.BeanUtils;
- public class Test {
- private User user = new User();
- private Order order1 = new Order();
- private Order order2 = new Order();
- private Order order3 = new Order();
- private Map map = new HashMap();
- private User user1 = new User();
- public Test(){
- init();
- }
- public static void main(String[] args) throws Exception{
- Test test = new Test();
- //輸出某個對象的某個屬性
- System.out.println(BeanUtils.getProperty(test.user, "username"));
- //輸出某個對象的內嵌屬性,只要使用點號分隔
- System.out.println(BeanUtils.getProperty(test.order1, "user.username"));
- //BeanUtils還支持List和Map類型的屬性,對於Map類型,則需要以"屬性名(key值)"的
- //對於Indexed,則爲"屬性名[索引值]",注意對於ArrayList和數組都可以用一樣的方式進行操作
- System.out.println(BeanUtils.getProperty(test.user1, "map(order2).desc"));
- //拷貝對象的屬性值
- User tempUser = new User();
- BeanUtils.copyProperties(tempUser, test.user1);
- System.out.println(tempUser.getUsername());
- System.out.println(tempUser.getId());
- }
- //初始化
- public void init(){
- user.setId(0);
- user.setUsername("zhangshan");
- order1.setId(1);
- order1.setDesc("order1");
- order1.setUser(user);
- order2.setId(2);
- order2.setDesc("order2");
- order2.setUser(user);
- order3.setId(3);
- order3.setDesc("order3");
- order3.setUser(user);
- map.put("order1", order1);
- map.put("order2", order2);
- map.put("order3", order3);
- user1.setId(1);
- user1.setUsername("lisi");
- user1.setMap(map);
- }
- }
輸出結果爲:
zhangshan
zhangshan
order2
lisi
1
2. BeanCompartor 動態排序
A:動態設定Bean按照哪個屬性來排序,而不再需要再實現bean的Compare接口進行復雜的條件判斷
- //動態設定Bean按照哪個屬性來排序,而不再需要再實現bean的Compare接口進行復雜的條件判斷
- List list = new ArrayList();
- list.add(test.order2);
- list.add(test.order1);
- list.add(test.order3);
- //未排序前
- for(Order order : list){
- System.out.println(order.getId());
- }
- //排序後
- Collections.sort(list, new BeanComparator("id"));
- for(Order order : list){
- System.out.println(order.getId());
- }
B:支持多個屬性的複合排序
- //支持多個屬性的複合排序
- List sortFields = new ArrayList();
- sortFields.add(new BeanComparator("id"));
- sortFields.add(new BeanComparator("desc"));
- ComparatorChain multiSort = new ComparatorChain(sortFields);
- Collections.sort(list, multiSort);
- for(Order order : list){
- System.out.println(order.getId());
- }
C:使用ComparatorUtils進一步指定排序條件
上面的排序遇到屬性爲null就會拋出異常, 也不能設定升序還是降序。
不過,可以藉助commons-collections包的ComparatorUtils
BeanComparator,ComparableComparator和ComparatorChain都是實現了Comparator這個接口
- //上面的排序遇到屬性爲null就會拋出異常, 也不能設定升序還是降序。
- //不過,可以藉助commons-collections包的ComparatorUtils
- //BeanComparator,ComparableComparator和ComparatorChain都是實現了Comparator這個接口
- Comparator mycmp = ComparableComparator.getInstance();
- mycmp = ComparatorUtils.nullLowComparator(mycmp); //允許null
- mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序
- Comparator cmp = new BeanComparator("id", mycmp);
- Collections.sort(list, cmp);
- for(Order order : list){
- System.out.println(order.getId());
- }
附註:關於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