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

场景: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);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos 搭建 NFS

服务端yum -y install nfs-utils rpcbind chkconfig nfs on chkconfig rpcbind on mkdir -p /tmp/share chmod 600 /tmp/share vim /etc/exports /tmp/share 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync) /tmp/share *(rw,no_root_squash,no_all_squash,sync) servic…

门户网站运营方案_网络营销方案涉及的工作内容有哪些

问&#xff1a;在公司从事网络营销推广工作&#xff0c;想问下要撰写网络营销方案&#xff0c;要涉及到哪些层面&#xff0c;工作内容有哪些呢&#xff1f;答&#xff1a;总的来说&#xff0c;网络营销方案涉及到&#xff1a;网站技术&#xff0c;市场营销&#xff0c;网络应用…

用宝塔本地搭建php,Windows系统如何使用宝塔面板一键快速搭建本地服务器环境(LNMP/LAMP)...

宝塔面板宝塔面板类似于wamp&#xff0c;xampp等一键集成环境。但是宝塔面板操作更简单&#xff0c;更新更快。个人建议使用宝塔替代wamp。(LNMP等环境不再赘述&#xff0c;请自行百度。建议使用LNMP环境&#xff0c;即NginxMySQLPHP环境)下载前往宝塔面板官网https://www.bt.c…

C# File类的操作

File类&#xff0c;是一个静态类&#xff0c;主要是来提供一些函数库用的。静态实用类&#xff0c;提供了很多静态的方法&#xff0c;支持对文件的基本操作&#xff0c;包括创建&#xff0c;拷贝&#xff0c;移动&#xff0c;删除和打开一个文件。File类方法的参量很多时候都是…

微信小程序动态点赞php,在微信小程序中如何实现点赞功能

这篇文章主要介绍了微信小程序基于本地缓存实现点赞功能的方法,涉及微信小程序界面布局、事件响应及缓存操作等相关实现技巧,需要的朋友可以参考下本文实例讲述了微信小程序基于本地缓存实现点赞功能的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;wxml中的写法…

lstm需要优化的参数_LSTM的物理结构和一些细节

海晨威&#xff1a;一幅图真正理解LSTM的物理结构​zhuanlan.zhihu.com这个是网上看的最多的图了&#xff0c;但是在理解lstm的应用过程中的时候这个图带来了不少麻烦。展开之后实际的物理结构是这样的&#xff0c;1、2图同颜色的点代表了同一个东西&#xff1b;问题1&#xff…

OLED中的Demura

OLED作为一种电流型发光器件已越来越多地被应用于高性能显示中。由于它自发光的特性&#xff0c;与LCD相比&#xff0c;AMOLED具有高对比度、超轻薄、可弯曲等诸多优点。但是&#xff0c;亮度均匀性和残像仍然是它目前面临的两个主要难题&#xff0c;要解决这两个问题&#xff…

python的编程模式有哪两种_python程序的两种运行方式是什么

python程序的两种运行方式是什么 第一种方式&#xff1a;REPL 所谓REPL即read、eva、print、loop&#xff08;读取、计算、打印、循环&#xff09;&#xff0c;实现REPL运行方式有以下两种&#xff1a; 1、IDLE&#xff08; 集成开发环境或集成开发和学习环境&#xff09;是Pyt…

对Linux命令od -tc -tx1的C语言程序实现myod-优化版

导语 自编od C语言实现版名为myod上个星期有一个初代版&#xff0c;链接- myod原版这星期的课上要求实现myod-系统调用版本&#xff0c;要求如下 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能&#xff0c;注意XXX是文件…

python字典求平均值_Python 3.4 – 如何获得字典值的平均值?

好吧,让我们迭代所有字典键并平均项目&#xff1a; avgDict {} for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict[k] sum(v)/ float(len(v)) 现在你可以看到&#xff1a; avgDict Out[5]: {Ivan: 3.106666666666667, Martin: 4.81666…

PHP使用指南,PHP使用指南-cookies部分

php使用指南-cookies部分在这课教程我们将学习怎样利用 PHP 处理cookies,我将试着使事情尽可能简单地去解释cookies的一些实际应用。什么是cookies及作用&#xff1f;cookies是由web服务器产生的并且存在客户端的一些信息。它嵌在html信息中&#xff0c;由服务器端指定&#xf…

python猜数字游戏猜n次_python实践项目四:猜数字游戏

1 #!/usr/bin/python 2 #-*- coding: UTF-8 -*- 3 4 importrandom5 secretNumberrandom.randint(1,20)6 print "Im thinking of a number between 1 and 20." 7 times 08 for i in range(1,7):9 print "Take a guess:" 10 guessint(input())11 if guess

使用Linux记录

更新时间: 2018-12-12 Linux Usage 缘起&#xff1a;最近将系统更换为Linux&#xff0c;虽然之前有用过&#xff0c;但只是当作尝试&#xff0c;未当为主系统&#xff0c;这次下定决心以它为主系统&#xff0c;懒得去纠结使用win的一种不道德感及不爽感&#xff0c;游戏及娱乐与…

使用java实现rfc3161,openssl验证用自签名证书签名的RFC3161时间戳

我使用openssl从rfc 3161 timestampreq生成了一个rfc3161 timestampresp。因此,我使用了自签名CA证书和自签名CA使用以下命令颁发的TSA证书:openssl ts -reply -queryfile request.tsq -signer TSAcert.pem -out response.tsr已创建响应。openssl ts -reply -text -in response…

halcon 旋转_Halcon视觉软件应该如何系统学习?

End 声明&#xff1a;部分内容来源于网络&#xff0c;仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥&#xff0c;请联系删除。

java使用重复的类库,java list 去除 重复值

一&#xff1a;Hastset根据hashcode判断是否重复&#xff0c;数据不会重复Java代码/** List order not maintained **/public static void removeDuplicate(ArrayList arlList){HashSet h new HashSet(arlList);arlList.clear();arlList.addAll(h);}二&#xff1a;通过Hashset…

JavaScript--关于变量提升思考

下面例子仅仅是思考变量提升使用&#xff1a; 在实际开发中并不推荐使用相同名字的变量和函数&#xff01; 1 // 如果变量和函数同名的话&#xff0c;函数优先提升 2 console.log(a); 3 function a() { 4 console.log(aaaaa); 5 } 6 var a 1; 7 console.log(a); 更多简单经典…

C++求复数的角度_【研读.教材分析】“勾股定理”教学——基于单元整体的角度再思考...

(西安市第八十六中学 刘丽丽)学科教学要注重知识的“生长点”和“延伸点”&#xff0c;把课时知识置于学科整体逻辑体系中&#xff0c;关注结构和通法&#xff0c;处理好局部与整体之间的关系。所以在北师大版八年级上册数学第一章《勾股定理》的备课中&#xff0c;我再次以问…

java 十进制 左移,java移位运算符之十进制转二进制

本次MS08-067严重漏洞各系统补丁地址如下&#xff1a;中文操作系统KB958644补丁下载地址&#xff1a;Windows Vista 安全更新程序 (KB958644)Windows Server 2008 x64 Edition 安全更新程序 (KB958644)Windows Server 2003 x64 Edition 安全更新程序 (KB958644)Windows Server …

angualr 单选全选方法(适用购物车/各种列表删除等)

Html部分&#xff1a; <table class"pay_attention_table"><thead><tr><!--ng-click"all(selectAll)"--><th class"c_aa w52"><input type"checkbox" class"mr4" ng-model"selectObj…