文档章节

List排序类

ThinkGem
 ThinkGem
发布于 2016/07/17 16:16
字数 327
阅读 55
收藏 0
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());
		}
		
	}
}

 

本文转载自:http://thinkgem.iteye.com/blog/829106

共有 人打赏支持
ThinkGem

ThinkGem

粉丝 965
博文 136
码字总数 21994
作品 1
济南
架构师
排序——升序降序的使用

前言 在做项目的过程中,偶尔会用到对集合中数据进行升序降序的排列问题,问题不是很难,但有时处理起来非常浪费时间,于是今天就把排序问题稍微处理了下,整理成一个排序工具类——Compare...

奔跑的佩恩
2017/12/26
0
0
Java 中 Comparable 和 Comparator 比较

本文,先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明。 Comparable 简介 Comparable 是排序接口。 若一个类实现了Comparable接口,就意...

foxeye
2016/03/01
60
0
C++ list结构体变量排序

以下内容是自己整理的根据结构体里面的不同变量,对list排序的实例,若有问题可以留言。仅供参考。 #include #include #include using namespace std; //声明结构体 typedef struct testLis...

Freedom_lyx
08/10
0
0
排序算法在项目中的使用

一、使用排序算法对map进行排序 上面使用的是compare方法进行对map排序,可是我们还是没有到原有的排序算法对map进行排序。这个排序是非常简单也是经常用到的。 很多时候我们在进行的数据,从...

小车车
2016/08/28
25
0
知识总结:Java集合对象排序

1.List排序 这个和数组的排序又不一样了。 其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort,对于List和Vector而言,你可以使用Collections.sort方法 Java A...

牛客网
2017/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
3
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
3
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
2
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部