package com.shaphar.erp.mobile.common.util; import java.lang.reflect.Method; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Created by Administrator on 2018/7/17. */ public class ListSortUtil<T> { /** * * @param targetList 要排序的集合(使用泛型) * @param sortField 要排序的集合中的实体类的某个字段 * @param sortMode 排序的方式(升序asc/降序desc) */ @SuppressWarnings({ "unchecked", "rawtypes" }) public void sort(List<T> targetList, final String sortField, final String sortMode) { //使用集合的sort方法 ,并且自定义一个排序的比较器 /** * API文档: * public static <T> void sort(List<T> list,Comparator<? super T> c) * 根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器 相互比较 * (也就是说,对于列表中的任意 e1 和 e2 元素, c.compare(e1, e2) 不得抛出 ClassCastException)。 * 参数: list - 要排序的列表。 * c - 确定列表顺序的比较器。 null 值指示应该使用元素的 自然顺序。 */ Collections.sort(targetList, new Comparator() { //匿名内部类,重写compare方法 public int compare(Object obj1, Object obj2) { int result = 0; try { //首字母转大写 String newStr = sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w",""); //获取需要排序字段的“get方法名” String methodStr = "get"+newStr; /** API文档:: * getMethod(String name, Class<?>... parameterTypes) * 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 */ Method method1 = ((T)obj1).getClass().getMethod(methodStr, null); Method method2 = ((T)obj2).getClass().getMethod(methodStr, null); if (sortMode != null && "desc".equals(sortMode)) { /** * Method类代表一个方法,invoke(调用)就是调用Method类代表的方法。 * 它可以让你实现动态调用,也可以动态的传入参数。 * API文档:(这个英文解释更地道易懂,原谅我是英文渣,哎!) * invoke(Object obj, Object... args) * Invokes the underlying method represented by this Method object, * on the specified object with the specified parameters. */ /** API文档: * String-----public int compareTo(String anotherString) * 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。 * 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较 */ result = method2.invoke(((T) obj2), null).toString() .compareTo(method1.invoke(((T) obj1), null).toString()); // 倒序 } else { result = method1.invoke(((T) obj1), null).toString() .compareTo(method2.invoke(((T) obj2), null).toString()); // 正序 } } catch (Exception e) { throw new RuntimeException(); } return result; } }); } }
相关推荐
.Net中的集合排序可以这么玩你知道吗 .Net中的集合排序可以这么玩你知道吗
SORTSET 根据用户定义的顺序对集合进行排序 对于向量,R = SORTSET(S,ORDER)根据ORDER指定的顺序对集合S进行排序。 如果 S 的元素不在 ORDER 中,它们将按原始顺序放在 R 的末尾。 对于矩阵,SORTSET(S,ORDER) 对...
导入jar 包 调用 String[] arr1 = new String[1]; ... 参数1 排序的集合 参数2 排序的字段(与定义字段一致) 可多个 参数3 排序方式(asc desc) 暂时只支持String 和int的排序 可能有些BUG 敬请谅解
如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator 接口?它们有什么区别? 如何使用 ConcurrentHashMap 类来实现线程安全的映射? 如何避免在多线程环境下对同一集合的并发修改? 如何使用...
java中集合排序
java 集合分组排序帮助类有好的意见可以互相交流不甚感激
对集合中的对象进行排序,例如:List中存放了User对象,则可根据User对象的某一个属性进行顺序or倒序的排序
利用集合进行排序,VB6.0源代码编写,很实用
Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java里面最重要、最常用也就是集合那部分了,能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本教程详细解释了关于Java中的集合是...
Java集合排序及java集合类详解,对list,set,map等java集合进行详细讲解
Sort5 是一个小型的 C# 类库,具有许多对字符串、数字和 DateTime 变量的集合进行排序的函数。
Java 集合排序 及java集合类 详解.pdf
list集合树状排序 对于前端jquery-treetable无法进行父子关联数据问题进行改进,后台传list集合前,对list进行排序,然后在返回到前台。
Java相关 public static void main(String[] args) { User u1=new User(1, "zhangsan");... //放入到Set集合中 Set userset=new HashSet(); userset.add(u1); userset.add(u2); userset.add(u3);
用Java语言实现的各种排序,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。 插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm....
java 对象集合按字段排序
HashMap的应用实例 Map中元素存放是无序的 HashMap注意事项: 1,HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中; 2,当向HashMap中put一对键值时,它会根据key的hashCode值计算...
数组和集合的排序.rar数组和集合的排序.rar
定义学生类,每个学生有3门课的成绩, 从键盘输入以上数据(包括姓名,三门课成绩), 输入的格式:如:zhagnsan,30,40,60计算出总成绩, 并把学生的信息和计算出的总分数高低顺序...(如果总分相同,按照姓名排序)