博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 多字段排序
阅读量:6927 次
发布时间:2019-06-27

本文共 3102 字,大约阅读时间需要 10 分钟。

hot3.png

java 多字段排序 博客分类: java
/**	 * Sort List by multiple conditions.
* It's like SQL 'Order by' clause. Input multiple Comparator * in List as argument. * * @param
* @param list * @param comparatorList * @throws IllegalArgumentException if comparatorList is empty * @author shengyuan.lu 卢声远
*/ public static
void sort(List
list, final List
> comparatorList) { if (comparatorList.isEmpty()) {//Always equals, if no Comparator. throw new IllegalArgumentException("comparatorList is empty."); } Comparator
comparator = new Comparator
() { public int compare(T o1, T o2) { for (Comparator
c:comparatorList) { if (c.compare(o1, o2) > 0) { return 1; } else if (c.compare(o1, o2) < 0) { return -1; } } return 0; } }; Collections.sort(list, comparator); }

 

public void sortByMethod(List
list, final String method, final boolean reverseFlag) { Collections.sort(list, new Comparator
() { @SuppressWarnings("unchecked") public int compare(Object arg1, Object arg2) { int result = 0; try { Method m1 = ((E) arg1).getClass().getMethod(method, null); Method m2 = ((E) arg2).getClass().getMethod(method, null); Object obj1 = m1.invoke(((E)arg1), null); Object obj2 = m2.invoke(((E)arg2), null); if(obj1 instanceof String) { // 字符串 result = obj1.toString().compareTo(obj2.toString()); }else if(obj1 instanceof Date) { // 日期 long l = ((Date)obj1).getTime() - ((Date)obj2).getTime(); if(l > 0) { result = 1; }else if(l < 0) { result = -1; }else { result = 0; } }else if(obj1 instanceof Integer) { // 整型(Method的返回参数可以是int的,因为JDK1.5之后,Integer与int可以自动转换了) result = (Integer)obj1 - (Integer)obj2; }else { // 目前尚不支持的对象,直接转换为String,然后比较,后果未知 result = obj1.toString().compareTo(obj2.toString()); System.err.println("MySortList.sortByMethod方法接受到不可识别的对象类型,转换为字符串后比较返回..."); } if (reverseFlag) { // 倒序 result = -result; } } catch (NoSuchMethodException nsme) { nsme.printStackTrace(); } catch (IllegalAccessException iae) { iae.printStackTrace(); } catch (InvocationTargetException ite) { ite.printStackTrace(); } return result; } }); }

 

转载于:https://my.oschina.net/xiaominmin/blog/1598076

你可能感兴趣的文章
每天一个linux命令(3):du命令
查看>>
Chisel3 - Tutorial - Stack
查看>>
一个连通图,采用邻接表作为存储结构,设计一个算法从顶点v出发的深度优化遍历的非递归过程...
查看>>
HTTP里面的响应和请求
查看>>
JVM参数设置及条调优原理
查看>>
高并发之缓存——高并发场景问题及实战
查看>>
leetcode832
查看>>
金融危机感悟
查看>>
学生管理系统管理系统
查看>>
About ArcGIS Server Multi_Layer Cache
查看>>
MySQL中的内置系统函数
查看>>
mongodb 记录整理
查看>>
肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化
查看>>
Jmeter安装
查看>>
《创业的智慧》选读:我们如何自欺欺人推迟发布(转)
查看>>
HTML基本结构与标签总结整理篇
查看>>
两行代码快速创建一个iOS主流UI框架
查看>>
输入三个整数,按由小到大的顺序输出
查看>>
python闭包和装饰器的理解
查看>>
linkin大话java
查看>>