public static <E> void sort(List<E> list, final String method, final String sort) { Comparator<E> comparator = new Comparator<E>() { public int compare(E a, E b) { int ret = 0; try { Method m1 = (a).getClass().getMethod(method); Method m2 = (b).getClass().getMethod(method); Object valueB = m2.invoke(b); Object valueA = m1.invoke(a); Method compareTo = valueB.getClass().getMethod("compareTo", valueA.getClass()); if (sort != null && "desc".equals(sort)) { // 倒序 ret = (int) compareTo.invoke(valueB, valueA); } else { // 正序 ret = (int) compareTo.invoke(valueA, valueB); } } catch (NoSuchMethodException ne) { logger.error("NoSuchMethod", ne); } catch (IllegalAccessException ie) { logger.error("IllegalAccess", ie); } catch (InvocationTargetException it) { logger.error("InvocationTarget", it); } return ret; } }; Collections.sort(list, comparator); }
通用,但三次反射损耗不少
优化之后:
public static <E> void sort(List<E> list, final String method, final String sort) { Comparator<E> comparator = new Comparator<E>() { public int compare(E a, E b) { int ret = 0; try { Method m1 = (a).getClass().getMethod(method); Method m2 = (b).getClass().getMethod(method); Object valueB = (Object)m2.invoke(b); Object valueA = (Object)m1.invoke(a); if (sort != null && "desc".equals(sort)) { // 倒序 ret = (int) ((Comparable<Object>) valueB).compareTo(valueA); } else { // 正序 ret = (int) ((Comparable<Object>) valueA).compareTo(valueB); } } catch (NoSuchMethodException ne) { logger.error("NoSuchMethod", ne); } catch (IllegalAccessException ie) { logger.error("IllegalAccess", ie); } catch (InvocationTargetException it) { logger.error("InvocationTarget", it); } return ret; } }; Collections.sort(list, comparator); }
相关推荐
JAVA排序汇总JAVA排序汇总JAVA排序汇总
java排序算法使用及场景说明 文档后面有一些别人的链接,多在google上搜索Java排序算法,及维基百科上面也有很全的算法介绍。
java排序.txt
java排序 java 排序 排序大全 算法 java算法
JAVA排序汇总,java应用中一些比较经典的排序算法
java排序大全(含各种常用得排序算法),学习排序不错得资料
java排序算法大全 为了便于管理,先引入个基础类: 一 插入排序 二 冒泡排序 三,选择排序 四 Shell排序 五 快速排序 六 归并排序 等等
java排序,简单介绍了java的主要有那些排序方法。
Java排序算法代码.
java排序Comparator和Comparable
Java 中的一些重要排序,比如冒泡,直接插入排序
Java排序方法详解大全 Java排序 快速排序 冒泡排序
java实现的常用的几种基本排序算法,插入、交换、选择、归并
java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!
Java排序算法:插入,冒泡,选择,Shell,快速排序,归并排序,堆排序,桶式排序,基数排序
执行语句:java sort <输入方式> <图形界面/非图形界面选择> <待排序数列> 例: java sort 0 643 323 12 3 523 23 //命令行输入数据并排序 java sort 1 1 //非图形界面下手动输入数据并排序 java sort 1 2 //手动...
java排序方法 java排序方法 java排序方法 java排序方法
Java排序算法实现 Java排序算法实现 Java排序算法实现
java 排序方法 面试的时候会碰到 下载学习吧