场景:Java 类 需 重新排序,有时升序、有时倒叙,有时是多字段排序

代码:

package GenericTest;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

/**

* [简述]:List通用排序工具类

* User: xyj

* Date: 2016/07/03

* Created with IntelliJ IDEA.

*/

public class ListSortUtils {

private static final String SORT_ASC = "asc";

private static final String SORT_DESC = "desc";

/**

* [简述]: 对List数组排序

* @param list 源数据 排序集合

* @param sort 升序 还是 降序,默认升序

* @return List

*/

public static List> sort(List> list,final String sort){

Collections.sort(list, new Comparator() {

@Override

public int compare(Object o1, Object o2) {

int ret = String.valueOf(o1).compareTo(String.valueOf(o2));;

if(null != sort && SORT_DESC.equalsIgnoreCase(sort)){

return -ret;

}else{

return ret;

}

}

});

return list;

}

/**

*[简述]: List 泛型 排序

* @param list 源数据 排序集合

* @param field 排序的数据字段名称

* @param sort 升序 还是 降序,默认升序

* @param 泛型T

* @return List

*/

public static List sort(List list,final String field,final String sort){

Collections.sort(list, new Comparator() {

@Override

public int compare(T o1, T o2) {

int ret = 0;

try {

Method method1 = o1.getClass().getDeclaredMethod(getMethodName(field),null);

Method method2 = o1.getClass().getDeclaredMethod(getMethodName(field), null);

ret = method1.invoke(o1).toString().compareTo( method2.invoke(o2).toString());

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

if(null != sort && SORT_DESC.equalsIgnoreCase(sort)){

return -ret;

}else{

return ret;

}

}

});

return list;

}

/**

*[简述]: List 泛型 排序

* @param list 源数据 排序集合

* @param fields 排序的数据字段名称

* @param sorts 升序 还是 降序

* @param 泛型T

* @return List

*/

public static List sort(List list,final String [] fields,final String [] sorts){

if(null != fields && fields.length > 0){

for(int index = 0;index < fields.length;index ++){

String sortRule = SORT_ASC;

if(null != sorts && sorts.length >= index && null != sorts[index]){

sortRule = sorts[index];

}

final String sort = sortRule;

final String field = fields[index];

Collections.sort(list, new Comparator() {

@Override

public int compare(T o1, T o2) {

int ret = 0;

try {

Method method1 = o1.getClass().getDeclaredMethod(getMethodName(field),null);

Method method2 = o1.getClass().getDeclaredMethod(getMethodName(field), null);

ret = method1.invoke(o1).toString().compareTo( method2.invoke(o2).toString());

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

if(null != sort && SORT_DESC.equalsIgnoreCase(sort)){

return -ret;

}else{

return ret;

}

}

});

}

}

return list;

}

private static String getMethodName(String str){

StringBuffer name = new StringBuffer();

name = name.append("get").append(firstLetterToCapture(str));

return name.toString();

}

private static String firstLetterToCapture(String name){

char[] arr = name.toCharArray();

arr[0] -= 32;

return String.valueOf(arr);

}

}

java 工具类sort_Java 通用排序工具类ListSortUtils相关推荐

  1. Java Generics示例教程 - 通用方法,类,接口

    Java Generics示例教程 - 通用方法,类,接口 Java Genrics是Java 5中引入的最重要的功能之一.如果您一直在使用Java Collections 对于版本5或更高版本,我确 ...

  2. java rabbitmq 工具类_RabbitMq通用管理工具类

    import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client ...

  3. java array 元素的位置_介绍java中的两种排序工具Arrays和Collections

    java中的排序工具主要是有两个Arrays和Collections.我们一个一个来讲解. 本来写好了每一种方法的测试代码,后来又给删了,因为我觉得如果想要去了解的话,可以直接查看这些常用的即可.因为 ...

  4. java sqlite 工具类_Java 工具类 - JDBC通用操作基类 BaseDao

    封装了增删改查功能 适用于MySQL.Oracle.SQLServer.DB2.Sybase.JTDS.PostgreSql.SQLite.Derby.H2.HSQLDB.ODBC 等等数据库,有需要 ...

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

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

  6. Java拖拽排序工具类

    package com.ciih.jwt.util.sort;import java.lang.reflect.Field; import java.util.Collections; import ...

  7. 实现一个通用的中英文排序工具

    前言 利用Collator类可以轻松实现排序,但是我们可能有各种model都需要进行排序,这样就会有一个问题,如果单独为每个model写一段排序代码,代码重复量很大. 所以我打算写一个通用的工具,使用 ...

  8. 集合--Set集合--HashSet类、LinkedHashSet类、TreeSet类及其自然排序

    Set集合 HashSet类 import java.util.HashSet;/*Set集合:元素唯一且元素无序(存储和取出顺序不一致)的集合HashSet类概述不保证 set 的迭代顺序特别是它不 ...

  9. JAVA 排序工具类

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

最新文章

  1. spring 框架学习(一)
  2. java 同步包_Java并发程序设计(四)JDK并发包之同步控制
  3. 小程序实现长按删除图片
  4. Android 图片平铺实现方式
  5. MyFaces Tree2控件使用 -----From http://blog.163.com/net_wood/blog
  6. 基于linux实现DNS互联网的搭建
  7. linux 基础命令 1
  8. 基于Redis+Kafka的首页曝光过滤方案
  9. OpenVINO安装步骤
  10. 辐流式重力浓缩池计算_污泥浓缩池工作方式
  11. jQuery调用WebService详解
  12. extjs中什么时候用{},什么时候用[]
  13. multisim10元件库介绍
  14. 数学史思维导图_高中数学课堂教学中思维导图的制作运用
  15. Excel单元格设置选择项
  16. 图像超分之——寻找两张图差异的区域
  17. Heiro试用失败记
  18. 史上最全面、最详细的Cookie总结
  19. ArcGlobe三维开发之十八——纵断面图的绘制
  20. 1046. Shortest Distance

热门文章

  1. java集合清空_java 集合删除数据
  2. ehcache使用_Java 程序员如何使用 Shiro 框架
  3. .net 5 正式版_ASP.NET Core 3时代全新开启,DevExpress ASP.NET增强Data Grid
  4. java中.of,java中instanceof的用法
  5. MySQL 删除用户
  6. 删除a标签下面的横线
  7. CRITIC法之python
  8. 【youcans 的 OpenCV 例程200篇】125. 形态算法之提取连通分量
  9. 鸿蒙系统中的 JS 开发框架
  10. php 根据数量创建数组,php实现根据字符串生成对应数组的方法