- 浏览: 6359414 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
1.Comparable接口是在java.lang类中的,而Comparator接口是在java.util类中的。
2.Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
用自定义类实现 Comparable接口,那么这个类就具有排序功能,Comparable和具体你要进行排序的类的实例邦定。
而Comparator比较灵活,它没有和任何类绑定,实现它的自定义类仅仅定义了一种排序方式或排序规则。不言而喻,这种方式比较灵活。我们的要排序的类可以分别和多个实现 Comparator接口的类绑定,从而达到可以按自己的意愿实现按多种方式排序的目的。Comparable——“静态绑定排序”,Comparator——“动态绑定排序”。
排序:
Collections.sort(lists, new comparator(){ int compare(Object o1, Object o2) { Member m1=(Member)o1; Member m2=(Member)o2; // 按姓名排序 return m1.getName().compareTo(m2.getName(); } });
根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数
属性为String型:(动态加载对象属性的get方法)
1. public class SortList<E>{ 2. public void Sort(List<E> list, final String method, final String sort){ 3. Collections.sort(list, new Comparator() { 4. public int compare(Object a, Object b) { 5. int ret = 0; 6. try{ 7. Method m1 = ((E)a).getClass().getMethod(method, null); 8. Method m2 = ((E)b).getClass().getMethod(method, null); 9. if(sort != null && "desc".equals(sort))//倒序 10. ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a), null).toString()); 11. else//正序 12. ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString()); 13. }catch(NoSuchMethodException ne){ 14. System.out.println(ne); 15. }catch(IllegalAccessException ie){ 16. System.out.println(ie); 17. }catch(InvocationTargetException it){ 18. System.out.println(it); 19. } 20. return ret; 21. } 22. }); 23. } 24. }
m1:
public java.lang.Integer com.openb2c.openreport.DayReport.getOrderSize()
完整连接:
1.http://wenku.baidu.com/view/a19a50ea81c758f5f61f674a.html
2.http://jardot.iteye.com/blog/762349
DayReport.java类:
public class DayReport extends BaseReport{ private String date; private Double totalFee; private Double refundFee; private Double getMoney; private Double postFee; private Integer orderSize; private Long productNum; //产品数,即符合条件的订单中有多少个产品 private Integer backProductNum; //退款通过的订单中产品的个数 private Integer backOrderNum; //退款通过的订单个数 public String getDate() { return date; } public void setDate(String date) { this.date = date; } public Double getTotalFee() { return totalFee; } public void setTotalFee(Double totalFee) { this.totalFee = totalFee; } public Double getRefundFee() { return refundFee; } public void setRefundFee(Double refundFee) { this.refundFee = refundFee; } public Double getGetMoney() { return getMoney; } public void setGetMoney(Double getMoney) { this.getMoney = getMoney; } public Double getPostFee() { return postFee; } public void setPostFee(Double postFee) { this.postFee = postFee; } public Integer getOrderSize() { return orderSize; } public void setOrderSize(Integer orderSize) { this.orderSize = orderSize; } public Long getProductNum() { return productNum; } public void setProductNum(Long productNum) { this.productNum = productNum; } public Integer getBackProductNum() { return backProductNum; } public void setBackProductNum(Integer backProductNum) { this.backProductNum = backProductNum; } public Integer getBackOrderNum() { return backOrderNum; } public void setBackOrderNum(Integer backOrderNum) { this.backOrderNum = backOrderNum; } }
1、对Double型数据排序(通用方法):
/** * 给Double型排序 * method 为DayReport中属性的 get方法名如:getOrderSize * sort 为排序 *check 为选择的条件如1天内、1月内等 */ @SuppressWarnings("unchecked") public static void SortDouble (List<DayReport> list,final String method,final String sort){ Comparator comparator = new Comparator(){ public int compare(Object a, Object b) { int ret = 0; try { Method m1 = ((DayReport)a).getClass().getMethod(method, null); Method m2 = ((DayReport)b).getClass().getMethod(method, null); double m=(Double) m1.invoke((DayReport)a); double n=(Double) m2.invoke((DayReport)b); double c=m-n; if(c>0.0)//倒序 { if(sort.equals("DESC")){ ret=-1; //本来 }else{ ret=1; } } else if(c<0.0){ if(sort.equals("DESC")){ ret=1; }else{ ret=-1; } }else{ ret=0; } } catch (SecurityException e) { StringBuilder msg = new StringBuilder("Double类型数据排序时出现异常!"); Debug.logError(e,msg.toString(), module); } catch (NoSuchMethodException e) { StringBuilder msg = new StringBuilder("Double类型数据排序时出现异常!"); Debug.logError(e,msg.toString(), module); } catch (IllegalAccessException e) { StringBuilder msg = new StringBuilder("Double类型数据排序时出现异常!"); Debug.logError(e,msg.toString(), module); } catch (InvocationTargetException e) { StringBuilder msg = new StringBuilder("Double类型数据排序时出现异常!"); Debug.logError(e,msg.toString(), module); } return ret; } }; Collections.sort(list,comparator); }
2.对Int型排序(通用方法)
/** * 给int型排序 */ @SuppressWarnings("unchecked") public static void SortInt (List<DayReport> list,final String method,final String sort){ /*Comparator comparator = new Comparator(){ public int compare(Object a, Object b) { Integer aa = ((DayReport) a).getOrderSize(); Integer bb = ((DayReport) b).getOrderSize(); Integer cc = aa - bb; if (cc > 0) return 1; if (cc < 0) return -1; else return 0; } }; Collections.sort(list,comparator); }*/ Comparator comparator = new Comparator() { public int compare(Object a, Object b) { int ret = 0; Method m1 = ((DayReport) a).getClass().getMethod(method, null); Method m2 = ((DayReport) b).getClass().getMethod(method, null); Integer m = (Integer) m1.invoke((DayReport) a); Integer n = (Integer) m2.invoke((DayReport) b); Integer c = m - n; if (c > 0)// 倒序 { if (sort.equals("DESC")) { ret = -1; // 本来 } else { ret = 1; } } else if (c < 0) { if (sort.equals("DESC")) { ret = 1; } else { ret = -1; } } else { ret = 0; } return ret; } }; Collections.sort(list, comparator); }
使用:
<th><a href="<@ofbizUrl>queryDay?check=${check?if_exists}&method=getTotalFee&sort=${orderby?if_exists}</@ofbizUrl>">销售额</a></th> <th><a href="<@ofbizUrl>queryDay?check=${check?if_exists}&method=getRefundFee&sort=${orderby?if_exists}</@ofbizUrl>">退款额</a></th>
String method=(String)context.get("method"); String sort=(String)context.get("sort"); if(UtilValidate.isEmpty(sort)){ sort="ASC"; }else{ if (UtilValidate.areEqual(sort, "ASC")) { sort = "DESC"; } else { sort = "ASC"; } } if(UtilValidate.isNotEmpty(method)){ if(method.equals("getOrderSize")){ DayReportService.SortInt(finallyList,method,sort); }else{ DayReportService.SortDouble(finallyList,method,sort); } } result.put("finallyList", finallyList); result.put("sort", sort); result.put("check", check);
评论
1 楼
mm4409092
2013-11-07
Java通用工具类之按对象属性排序工具类
http://blog.csdn.net/lk_blog/article/details/12804873
http://blog.csdn.net/lk_blog/article/details/12804873
发表评论
-
拦截器和过滤器的区别
2019-06-27 10:46 7071【Spring的拦截器】于【Servlet的Filter】有 ... -
高并发下的数据结构List/Set/Map
2019-03-26 14:17 1273高并发下的Java数据结 ... -
tomcat的三种运行模式+JAVA NIO
2019-03-12 11:13 5096详解Tomcat三种运行模 ... -
反射基础
2019-01-11 14:51 671十年架构师不到400行手写一个Spring MVC ... -
java反射原理, 注解原理
2019-01-08 17:22 4597注解机制及原理 JAVA ... -
内存泄露与内存溢出的区别
2018-12-24 16:14 27531、内存泄漏 memory le ... -
深入解析JAVA中的装箱与拆箱
2018-12-21 10:42 1330地址: https://www.cnblogs.com/d ... -
负载均衡原理
2018-12-20 17:43 804简介几种负载均衡原理 高并发解决方案之一 ——负载均衡 ... -
CAS自旋锁
2018-12-20 11:12 1652我们常说的 CAS 自旋锁是什么 CAS与ABA问题 ... -
编码问题+字节+unicode
2017-11-28 10:52 4307ASCII -》 ISO8859-1 -》GB2312 - ... -
Java基础知识总结(二)~持续学习中
2017-10-11 17:56 162430.try-catch public class T ... -
StringTokenizer-大数据情况下截取字符串
2016-11-23 11:00 3200java.util.StringTokenizer ... -
tomcat中处理消息提示的公用类 StringManager.java
2016-11-18 10:24 1861代码很简单,主要学习思路。 tomcat中处理消息 ... -
JAVA IO流中的flush
2016-11-18 09:51 3267前言: 大家在使用Java IO流中Output ... -
读取JAR中文件
2015-12-08 17:03 3808【解惑】深入jar包:从jar包中读取资源文件 读取ja ... -
JAVA过滤敏感词
2015-12-07 17:38 3313Java实现敏感词过滤 编程珠玑 - 算法优化 - 过 ... -
java过滤特殊字符串
2015-08-25 19:32 14696// 过滤特殊字符 public stat ... -
java.lang.reflect.Array.newInstance与list.toArray
2015-08-18 16:35 3907一. import java.util. ... -
JRE下的rt.jar、tools.jar
2014-10-29 10:59 13476JRE下的rt.jar: 这个文件是极为重要的一个文件,r ... -
内部类
2014-10-21 17:58 1298定义: 内部类 就是在类的内部嵌套定义一个类 使用内部类 ...
相关推荐
这篇博客“List中保存对象,按对象中某一属性排序【含程序源码】”恰好提供了这样的解决方案。下面我们将深入探讨这个主题。 首先,让我们理解列表(List)和对象排序的基本概念。列表是Java集合框架的一部分,它允许...
在开发中,我们可能会遇到,我们会根据不同情况对一个List集合进行排序操作,为了方便List集合根据对象中的某一个属性进行排序,开发了此工具类:
然后定义了一个名为`compare`的函数,这个函数接收一个参数`property`,它是字符串类型,代表对象中需要根据其值进行排序的属性名。 `compare`函数返回一个新的函数,这个返回的函数才是实际的比较函数。在`compare...
按所推荐的程序在IE下跑了下,的确,排序耗时很小。 代码如下: [removed] /* * 洗牌 */ function ... /* * 快速排序,按某个属性,或按“获取排序依据的函数”,来排序. * @method soryBy * @static * @
本文将深入探讨时间排序函数以及如何按照对象数组中的特定属性进行排序。 首先,我们来理解“时间排序函数”。这个函数的主要目标是根据时间值对一组数据进行排序。在计算机科学中,时间通常表示为日期和时间戳,...
在例子中,我们使用了一个`lambda`表达式`lambda x: x.salary`作为`key`,表示按照Person对象的`salary`属性进行排序。如果想要降序排序,只需将`reverse`参数设为`True`。 ```python obj_list.sort(key=lambda x: ...
在Java编程中,储存对象并按对象的某个属性进行排序是一项常见的需求。下面将详细介绍三种在Java中实现这一目标的方法,以及如何使用这些方法来优化排序过程。 **第一种方法:使用`TreeSet`** `TreeSet`是Java集合...
对集合中的对象进行排序,例如:List中存放了User对象,则可根据User对象的某一个属性进行顺序or倒序的排序
在JavaScript中,处理数据时经常需要对数组进行排序,特别是当数组包含对象时,我们可能需要根据对象的某个属性来排序。本文将深入探讨如何使用JavaScript实现这一功能。 首先,JavaScript的`Array.prototype.sort...
Android List(集合)中的对象以某一个字段排序案例 Android List(集合)中的对象以某一个字段排序案例是 Android 开发中非常重要的一部分。在实际开发中,我们经常需要对一个对象的集合按照某一个字段进行排序,例如...
本文实例讲述了JS实现json对象数组按对象属性排序操作。分享给大家供大家参考,具体如下: 在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序。 例如...
Java 8 新特性将 List 中按指定属性排序过滤重复...总结来说,Java 8 新特性将 List 中按指定属性排序过滤重复数据的方法是一个非常有用的功能,它可以帮助开发者快速地对数据进行排序和过滤,满足实际应用中的需求。
Java List 集合排序按某一属性排序操作 Java 集合框架中提供了多种排序方法,今天我们将介绍如何对 Java List 集合进行排序,特别是按照某一属性进行排序操作。 Java List 集合排序 Java 的 List 集合提供了多种...
在编程领域,集合对象排序是一项基础且重要的任务,它涉及到数据结构和算法的知识。当我们处理包含多个元素的数据集,如数组、列表或集合时,排序能够帮助我们快速查找、分析和展示信息。本文将深入探讨如何对对象...