文档章节

List排序类

ThinkGem
 ThinkGem
发布于 2016/07/17 16:16
字数 327
阅读 61
收藏 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

粉丝 1014
博文 137
码字总数 22174
作品 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
知识总结:Java集合对象排序

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

牛客网
2017/12/29
0
0
排序算法在项目中的使用

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

小车车
2016/08/28
25
0

没有更多内容

加载失败,请刷新页面

加载更多

用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
1
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
3
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
3
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部