List排序类

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

/**
 * 排序List  thinkgem@gmail.com
 * @param <E> 排序的对象
 */
public class SortList<E>{	
	
	public void sort(java.util.List<E> list, final String method, final String sort){
		Collections.sort(list, new Comparator<E>() {			
			public int compare(Object a, Object b) {
		    	int ret = 0;
		    	try{
			    	Method m1 = ((E)a).getClass().getMethod(method, null);
			    	Method m2 = ((E)b).getClass().getMethod(method, null);
			    	if(sort != null && "desc".equals(sort))//倒序
			    		ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a), null).toString());	
			    	else//正序
			    		ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());
		    	}catch(NoSuchMethodException ne){
		    		System.out.println(ne);
				}catch(IllegalAccessException ie){
					System.out.println(ie);
				}catch(InvocationTargetException it){
					System.out.println(it);
				}
		    	return ret;
		    }
		 });
	}
	
	public static void main(String[] args)throws Exception{
		
		class UserInfo{
			private Integer id;
			private String name;
			private Date date;
			public UserInfo(Integer id, String name, Date date){
				this.id = id;
				this.name = name;
				this.date = date;
			}
			public Integer getId() {
				return id;
			}
			public void setId(Integer id) {
				this.id = id;
			}
			public String getName() {
				return name;
			}
			public void setName(String name) {
				this.name = name;
			}
			public Date getDate() {
				return date;
			}
			public String getDateFormatted() {
				return new SimpleDateFormat("yyyy-MM-dd").format(date);
			}
			public void setDate(Date date) {
				this.date = date;
			}
			@Override
			public String toString() {
				return id + ", " + name + ", " + getDateFormatted();
			}
		}
		
		List<UserInfo> list = new ArrayList<UserInfo>();
		
		SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
		
		list.add(new UserInfo(3,"b",formater.parse("1980-12-01")));
		list.add(new UserInfo(1,"c",formater.parse("1980-10-01")));
		list.add(new UserInfo(2,"a",formater.parse("1973-10-01")));
					
		System.out.println("-------原来序列-------------------");
		for(UserInfo user : list){
			System.out.println(user.toString());
		}		
		
		//调用排序类
		SortList<UserInfo> sortList = new SortList<UserInfo>();
		
		System.out.println("--------按id排序------------------");
		sortList.sort(list, "getId", "desc");
		for(UserInfo user : list){
			System.out.println(user.toString());
		}
		
		System.out.println("---------按name排序-----------------");		
		sortList.sort(list, "getName", null);
		for(UserInfo user : list){
			System.out.println(user.toString());
		}
		
		System.out.println("---------按date排序-----------------");
		sortList.sort(list, "getDateFormatted", null);
		for(UserInfo user : list){
			System.out.println(user.toString());
		}
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值