java反射练习 对集合中元素 按照方法进行排序

/** * 对集合中元素按照指定方法进行排序 * * @param list 需要排序的集合 * @param property 时间对象在集合对象中属性名称 * @param method 排序字段get方法 * @param reverse 是否倒序 */ public static <T> void sortByMethod(List<T> list, final String property, final String method, final boolean reverse) { Collections.sort(list, new Comparator<T>() { public int compare(Object arg1, Object arg2) { int result = 0; if (arg1 == null || arg2 == null) { return 0; }

1 try { 2 Field property1 = (arg1).getClass().getDeclaredField(property); 3 if(!property1.isAccessible()){ 4 property1.setAccessible(true); 5 } 6 7 // 获取时间对象 8 Object object1 = property1.get(arg1); 9 10 Field property2 = (arg2).getClass().getDeclaredField(property); 11 if(!property2.isAccessible()){ 12 property2.setAccessible(true); 13 } 14 // 获取时间对象 15 Object object2 = property2.get(arg2); 16 17 Method m1 = object1.getClass().getMethod(method, null); 18 Method m2 = object2.getClass().getMethod(method, null); 19 20 Object obj1 = m1.invoke(object1, null); 21 Object obj2 = m2.invoke(object2, null); 22 23 if (obj1 instanceof String) { 24 // 字符串 25 result = obj1.toString().compareTo(obj2.toString()); 26 } else if (obj1 instanceof Date) { 27 // 日期类型 28 if (obj1 == null || obj2 == null) { 29 return 0; 30 } 31 32 long time = ((Date) obj1).getTime() - ((Date) obj2).getTime(); 33 if (time > 0) { 34 result = 1; 35 } else if (time < 0) { 36 result = -1; 37 } else { 38 result = 0; 39 } 40 } else if (obj1 instanceof Short) { 41 result = (Short) obj1 - (Short) obj2; 42 } 43 44 if (reverse) { 45 // 倒序 46 result = -result; 47 } 48 49 } catch (NoSuchMethodException e) { 50 logger.error("获取对象方法出错,对象中没有当前方法 == >> " + e.toString(), e); 51 } catch (IllegalAccessException iae) { 52 logger.error("获取对象属性权限出错 == >> " + iae.toString(), iae); 53 } catch (InvocationTargetException ite) { 54 logger.error("此处接收被调用方法内部未被捕获的异常 == >> " + ite.toString(), ite); 55 } catch (NoSuchFieldException e) { 56 logger.error("获取对象属性出错,对象中没有当前属性 == >> " + e.toString(), e); 57 } 58 59 return result; 60 } 61});

}

点赞
收藏

评论区

加载中...

相关推荐

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java8新特性

Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str

java 数据结构(十二):Collections工具类的使用

Collections工具类1.作用:操作Collection和Map的工具类2.常用方法:reverse(List):反转List中元素的顺序shuffle(List):对List集合元素进行随机排序sort(List):根据元素的自然顺序对指定List集合元素升序排序sort(List,Comparator)

Java中集合排序常用的方式

1.集合排序概述1.1集合排序的主要内容:集合中的级别数据类型排序集合中的字符串排序Comparator接口Comparable接口1.2数组排序回顾intarr12,25,22,17,89,22;Arrays.sort(arr);输出:12,17,22,22,25,89Java的Arrays类中有一个sort()方法,该方法是Ar

java.lang.Comparable

Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的_自然排序_,类的compareTo方法被称为它的_自然比较方法_。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。