工具类

package sort;
import java.lang.reflect.Method;
import java.text.Collator;
import java.util.Comparator;
import java.util.Date;/*** @Title: LocalComparator.java* @Package* @Description: TODO(用一句话描述该文件做什么)* @author licy* @date 2018年11月8日* @version V1.0*/public class LocalComparator implements Comparator{private Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);/*** 排序字段**/private String[] sortBy;/** 字段对应排序类型 (1:升序,-1:降序) 一一对应*/private int[] order;public LocalComparator(String[] sortBy, int[] order) {this.sortBy = sortBy;this.order = order;}/** 定义排序规则 如果按照不止一个属性进行排序 这按照属性的顺序进行排序,类似sql order by 即只要比较出同位置的属性就停止*/public int compare(Object o1, Object o2) {for (int i = 0; i < sortBy.length; i++) {Object value1 = getFieldValueByName(sortBy[i], o1);Object value2 = getFieldValueByName(sortBy[i], o2);if (value1 instanceof Integer && value2 instanceof Integer) {int v1 = Integer.parseInt(value1.toString());int v2 = Integer.parseInt(value2.toString());if (v1 > v2) {return 1 * this.order[i];} else if (v1 < v2) {return -1 * this.order[i];}} else if (value1 instanceof Long && value2 instanceof Long) {Long v1 = (Long) value1;Long v2 = (Long) value2;if (v1 > v2) {return 1 * this.order[i];} else if (v1 < v2) {return -1 * this.order[i];}} else if (value1.getClass() == Date.class && value2.getClass() == Date.class) {Date time1 = (Date) value1;Date time2 = (Date) value2;if (time1.getTime() > time2.getTime()) {return 1 * this.order[i];} else if (time1.getTime() < time2.getTime()) {return -1 * this.order[i];}} else {int result = cmp.compare(value1, value2);if (result != 0) {return result * this.order[i];}}}return 1;}/*** * 通过反射,获取属性值* * @param fieldName* @param o* @return*/private Object getFieldValueByName(String fieldName, Object o) {try {String firstLetter = fieldName.substring(0, 1).toUpperCase();String getter = "get" + firstLetter + fieldName.substring(1);Method method = o.getClass().getMethod(getter, new Class[] {});Object value = method.invoke(o, new Object[] {});return value;} catch (Exception e) {System.out.println("属性不存在");return null;}}
}

  

测试类

package sort.test;/*** @Title: Persion.java* @Package sort.test* @Description: TODO(用一句话描述该文件做什么)* @author licy* @date 2018年11月8日* @version V1.0*/public class Persion {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Persion() {super();// TODO Auto-generated constructor stub}public Persion(String name, int age) {super();this.name = name;this.age = age;}}

  

执行测试类

package sort.test;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import org.junit.Test;import sort.LocalComparator;public class ComparatorTest {@SuppressWarnings("unchecked")@Testpublic void test() {List list = new ArrayList();Persion p1 = new Persion("a", 3);Persion p2 = new Persion("b", 2);Persion p3 = new Persion("b", 1);list.add(p1);list.add(p2);list.add(p3);String[] sortBy = new String[] { "name", "age" };int[] order = new int[] { 1, -1 };LocalComparator lc = new LocalComparator(sortBy, order);Collections.sort(list, lc);for(int i=0;i<list.size();i++) {Persion p = (Persion) list.get(i);System.out.println(p.getName() + ":" + p.getAge());}}}

  

转载于:https://www.cnblogs.com/lichangyunnianxue/p/9933660.html

list自定义排序工具类相关推荐

  1. Java通用工具类之按对象属性排序工具类

    本工具类为按对象属性排序工具类,实现的功能: 1.按对象的一个属性和多个属性进行排序. 2.按对象属性正序和倒序排列. 3.完美支持int等基础类和Integer等包装类. 4.完美支持属性为实现了C ...

  2. 小米开源文件管理器MiCodeFileExplorer-源码研究(8)-文件排序工具类FileSortHelper

    FileSortHelper的核心功能就是,对文件集合FileInfo排序. FileInfo有若干字段,根据字段定义了4种比较器Comparator. 调用示例:Collections.sort(L ...

  3. JAVA 排序工具类

    提供了以下排序: 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 桶排序 堆排序 package com.xingej.algorithm.sort;import java.util.Ar ...

  4. java 工具类sort_Java 通用排序工具类ListSortUtils

    场景:Java 类 需 重新排序,有时升序.有时倒叙,有时是多字段排序 代码: package GenericTest; import java.lang.reflect.InvocationTarg ...

  5. 自定义日期工具类 java 1614698552

    自定义日期工具类 java 1614698552 需求 思路 演练 日期转字符串的方法 字符串转日期方法 测试类 更多尝试 测试另一个方法

  6. java堆排序工具包_JAVA 排序工具类

    提供了以下排序:冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 桶排序 堆排序 package com.xingej.algorithm.sort;import java.util.Arr ...

  7. 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现

    安卓开发技巧二:自定义日志工具类XLog的实现 我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项 ...

  8. 自定义反序列化工具类

    自定义反序列化工具类 在实体类中实现了 implements Serializable 序列化 还实现了 UserDetails 对传入的字段 authorities 返序列化失败 对字段 autho ...

  9. java list排序工具类_java 之 Collections集合工具类排序

    数组有工具类Arrays,集合也有一个工具类Collections. sort方法: sort(List list):根据其元素natural ordering对制定的列表进行排序 sort(List ...

  10. 弄清std::chrono::system_clock::time_point,自定义时间工具类

    time_t 是32位的整数,用来存放格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不能表示毫秒,约能表示135年 time ...

最新文章

  1. vue请求在退出页面还执行吗_如何用 Cloudbase Framework 部署一个 Vue 项目
  2. Google下的这盘“小”棋
  3. ESP8266的一个小问题
  4. birt脚本for循环_Shell脚本应用 – for、while循环语句
  5. 10. VMware Tools 安裝
  6. 访问不了html的内容,index.html文件内容与实际访问结果不同
  7. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...
  8. Python学习总结(4)——运算符
  9. golangd历史版本下载路径
  10. Python中更新pip版本的那些事
  11. 计算机二级C语言选择题怎么做?要注意些什么?(易错点难点总结笔记)
  12. python智能写诗的程序_【百度大脑新品体验】智能写诗与智能春联
  13. getParameter和getParameterValues
  14. java图片文字识别_java初探Tess4j识别图片文字
  15. PhotoShop .psd文件格式读取分析(结合unity)
  16. 【HUSTOJ】1049: 字符图形5-星号梯形
  17. 赫兹的单位换算_赫兹单位换算(赫兹的单位换算公式)
  18. Protothreads:一个“蝇量级” C 语言协程库
  19. 前后端分离,不在同一服务器上部署,报错“strict-origin-when-cross-origin”解决
  20. vs code快速复制一行代码 快捷键

热门文章

  1. Android NDK开发之 NEON使用介绍
  2. c语言如何直接获得键盘反应,c语言获得键盘的按键
  3. Docker下载太慢
  4. hive explode函数入门及其与lateral view的结合
  5. rdd分组聚合算子xxByKey,xxBy
  6. java TreeSet去重与排序入门
  7. Const限定符与C++11Constexpr的区别
  8. spring-cloud Sleuth
  9. 命令式编程面向算法vs声明式编程面向描述
  10. win10 当前操作环境不支持支付宝控件 完美解决办法