`

compare 应用实例

 
阅读更多

整理2个compare 接口排序的实现方法:

 

 

一、 自己实现比较方法,包括一些复杂的多条件比较

 

Java代码  收藏代码
  1. public class Comparator {  
  2.     private String mothdName;  
  3.   
  4.     /** 
  5.      * 比较器,可以根据具体VO定制排序 
  6.      * @param mothdName 
  7.      * @return 
  8.      */  
  9.     public java.util.Comparator getComparator(final String mothdName) {  
  10.         this.mothdName = mothdName;  
  11.         return new java.util.Comparator() {  
  12.             public int compare(Object o1, Object o2) {  
  13.                 if (o1 instanceof String) {  
  14.                     return compare((String) o1, (String) o2);  
  15.                 } else if (o1 instanceof Integer) {  
  16.                     return compare((Integer) o1, (Integer) o2);  
  17.                 }else if (o1 instanceof Timestamp) {  
  18.                     return compare((Integer) o1, (Integer) o2);  
  19.                 }else if (o1 instanceof Date) {  
  20.                     return compare((Integer) o1, (Integer) o2);  
  21.                 } else if (o1 instanceof BpmTaskVo) {  
  22.                     return compare((BpmTaskVo) o1, (BpmTaskVo) o2);  
  23.                 } else {  
  24.                     System.err.println("未找到合适的比较器");  
  25.                     return 1;  
  26.   
  27.                 }  
  28.             }  
  29.   
  30.             public int compare(String o1, String o2) {  
  31.                 return o1.compareTo(o2);  
  32.             }  
  33.             public int compare(Integer o1, Integer o2) {  
  34.                 return o1.compareTo(o2);  
  35.             }  
  36.             public int compare(Boolean o1, Boolean o2) {  
  37.                 return o1.compareTo(o2);  
  38.             }  
  39.             public int compare(Timestamp o1, Timestamp o2){  
  40.                 return o1.compareTo(o2);  
  41.             }  
  42.             public int compare(Date o1, Date o2){  
  43.                 return o1.compareTo(o2);  
  44.             }  
  45.               
  46.               
  47.             //为BpmTaskVo 定制排序  
  48.             public int compare(BpmTaskVo vo1, BpmTaskVo vo2) {  
  49.                 Class<BpmTaskVo> voClass = BpmTaskVo.class;  
  50.                 Method mothdGet;  
  51.                 // mGet.setAccessible(true);//因为写成private 取值可以不设置  
  52.                 int i = 0;  
  53.                 try {  
  54.                     mothdGet = voClass.getDeclaredMethod(mothdName);  
  55.                     Object o1 = mothdGet.invoke(vo1);  
  56.                     Object o2 = mothdGet.invoke(vo2);  
  57. //                  System.out.println("方法名"+mothdName + "比较值o1 = "+o1 + "    o2 = "+o2);  
  58.                     i = compare(o1,o2);  
  59.                 } catch (Exception e) {  
  60.                     e.printStackTrace();  
  61.                 }  
  62.                 return i;  
  63.             }  
  64.   
  65.             // 多条件比较  
  66.             public int compare(BpmTaskVo o1, BpmTaskVo o2) {  
  67.                 String firstname1 = o1.getFirstName();  
  68.                 String firstname2 = o2.getFirstName();  
  69.                 String lastname1 = o1.getLastName();  
  70.                 String lastname2 = o2.getLastName();  
  71.                 Boolean sex1 = o1.getSex();  
  72.                 Boolean sex2 = o2.getSex();  
  73.                 Integer age1 = o1.getAge();  
  74.                 Integer age2 = o2.getAge();  
  75.                 return (compare(firstname1, firstname2) == 0 ? (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 : compare(age1, age2)) : compare(sex1, sex2)) : compare(lastname1, lastname2)) : compare(firstname1, firstname2));  
  76.             }  
  77.         };  
  78.     }  
  79.   
  80. }  

 

 

二、 利用反射和compareTo,动态比较。这种是比较好的方法

 

Java代码  收藏代码
  1. public class RmComparator {  
  2.   
  3.     /** 
  4.      * 比较器,可以根据VO具体字段比较 
  5.      *  
  6.      * @param mothdName 
  7.      * @return 
  8.      */  
  9.     public Comparator getComparator(final String mothdName) {  
  10.         return new Comparator() {  
  11.             public int compare(Object o1, Object o2) {  
  12.                 int val = 0;//默认不排序  
  13.                 try {  
  14.                     if (mothdName == null) {  
  15.                         val = myCompare(o1, o2);  
  16.                     } else {  
  17.                         val = myCompare(getValue(o1, mothdName), getValue(o2, mothdName));  
  18.                     }  
  19.                 } catch (Exception ex) {  
  20.                     ex.printStackTrace();  
  21.                 }  
  22.                 return val;  
  23.             }  
  24.             // VO中取值  
  25.             public Object getValue(Object bean, String methodName) throws Exception {  
  26.                 Method getMethod = bean.getClass().getMethod(methodName, null);  
  27.                 return getMethod.invoke(bean, null);  
  28.             }  
  29.   
  30.             // 具体执行比较的方法  
  31.             public int myCompare(Object obj1, Object obj2) throws Exception {  
  32.                 if (obj1 == null || obj2 == null){  
  33.                     return obj1 == null ? -1 : 1;  
  34.                 }  
  35.                 Class cl = obj1.getClass();  
  36.                 if (obj1 instanceof java.lang.Comparable) {  
  37.                     // byte int long float..number, date , boolean , char,String  
  38.                     Method getMethod = obj1.getClass().getMethod("compareTo"new Class[] { cl });  
  39.                     return (Integer) getMethod.invoke(obj1, new Object[] { obj2 });  
  40.                 }  
  41.                 return 0;//默认不排序  
  42.             }  
  43.         };  
  44.     }  
 

分享到:
评论

相关推荐

    Schema Compare 使用手册

    **Schema Compare 使用手册** 在数据库管理中,Schema Compare是一个至关重要的工具,用于比较和同步不同数据库之间的模式差异。本文将详细介绍PLSQL Developer中的Schema Compare功能,帮助用户更有效地管理和维护...

    cloudcompare中英文学习资料

    此外,还可能涉及插件的使用,因为CloudCompare支持自定义开发插件,这极大地扩展了其功能范围。 文件名"cloudcompare learn"可能是一个综合性的学习指南或教程集合,里面可能包含了多个章节,每个章节都专注于不同...

    Compare用法Compare用法Compare用法

    本文将深入探讨`Compare`的用法,以及在不同语言中的实现和应用。 在C#中,`Compare`方法主要用于字符串和数字的比较。例如,`String.Compare`可以用来比较两个字符串的字典顺序,它会返回一个整数值,表示两个字符...

    CloudCompare用户手册及功能概要

    11. **实例教程**:提供具体的案例,指导用户逐步完成特定的点云处理任务,加深理解和实践。 在使用CloudCompare的过程中,初级用户可能会遇到各种问题,但通过阅读用户手册和功能概要,可以找到相应的解答和指导。...

    sql compare 13对比数据库工具.zip

    在实际应用中,SQL Compare 13广泛应用于数据库的迁移、升级、备份恢复验证以及持续集成流程。通过自动化对比和同步,它可以显著减少手动检查和修正错误的时间,从而提升工作效率。对于开发团队来说,这意味着更快的...

    cloudcompare.rar

    本文将对CloudCompare及其相关插件的功能、使用方法以及实际案例进行深入探讨。 首先,CloudCompare的核心功能在于处理和比较点云数据。它提供了丰富的点云操作工具,包括导入、导出、过滤、分割、平滑、着色等,...

    SQL Data Compare 10【带注册机】

    红门(Red Gate)提供的注册机,如压缩包内的"Red.Gate.Four.Keygen.rar"文件,可能用于生成软件激活码,使用户能够在未购买正式许可证的情况下使用SQL Data Compare 10。然而,这种行为违反了软件的版权条款,可能...

    CloudCompare.rar

    - **案例实践**:通过实例学习如何在特定场景下应用CloudCompare解决实际问题。 - **技巧与提示**:了解提高工作效率的小技巧和避免常见错误的方法。 总之,CloudCompare是一款功能丰富的点云处理软件,对于需要...

    前端开源库-stream-compare

    使用stream-compare库,开发者可以创建两个或多个可读流实例,然后将它们进行比较。这个库提供了一种方法来同步或异步地读取和比较这些流的数据,从而找出可能存在的问题。例如,你可以检查两个流是否在相同的时间点...

    Node.js-buf-compare-Node.js0.12Buffer.compare()ponyfill

    在这个案例中,"buf-compare"库填补了Node.js 0.12版本中`Buffer.compare()`的空白。 `Buffer.compare()`方法的主要功能是返回一个整数值,表示两个缓冲区的相对顺序。如果第一个缓冲区在字节顺序上小于第二个,则...

    EMF模型文件对比/比较(emf.compare)

    EMF.compare允许用户比较两个EMF模型实例,识别它们之间的差异,并可选择性地合并这些差异。 这篇博客文章(https://winseclone.iteye.com/blog/1797563)可能深入介绍了如何使用EMF.compare来处理和理解模型文件的...

    Ultra Compare

    五、应用实例 1. 开发者在进行版本控制时,可以使用Ultra Compare快速找出代码的差异,避免手动检查的繁琐。 2. 在文档编辑中,对比两份文档,可以快速定位并修正错误或不一致之处。 3. 数据库管理员可以通过对比...

    SQL DataBase schema & data Compare

    在实际应用中,有一些常用的SQL Schema和数据比较工具,如Redgate的SQL Compare和SQL Data Compare,以及Microsoft SQL Server Management Studio(SSMS)自带的比较功能。这些工具极大地简化了数据库管理和维护工作...

    UltraCompare (文件内容比较工具)

    四、应用实例与最佳实践 1. 在代码审查中,开发者可以利用UltraCompare Pro检查提交的代码与原版本的差异,确保代码质量。 2. 在文档更新时,使用该工具可以快速找出新旧版本的不同,避免遗漏修改。 3. 在数据...

    CloudCompare v2.9.1源码

    5. **应用案例**: - **地质调查**:通过比较不同时间的点云数据,分析地形变化,评估滑坡、地陷等地质灾害风险。 - **建筑BIM**:在建筑项目中,点云数据可以用于构建精确的三维模型,与设计图纸进行对比,检查...

    UltraCompare中文版+注册机+步骤

    4. **应用实例**: - **版本控制**:在开发环境中,开发人员可以利用UltraCompare来比较代码的旧版本和新版本,以确定哪些部分被修改。 - **数据恢复**:当硬盘数据出错或丢失时,通过比较备份和现有数据找出差异...

    Protues仿真实例(MEGA16)-Compare模块.zip

    本实例以“Protues仿真实例(MEGA16)-Compare模块”为主题,深入探讨了如何在该平台上使用MEGA16微控制器的比较器功能。 MEGA16是Atmel公司生产的一款8位AVR微控制器,具有丰富的I/O端口和多种内置模块,如ADC...

    Compare Table Data功能介绍

    以一个实际操作流程来演示如何使用"Compare Table Data": 1. 首先,我们创建两个模式hzzfsx和hzzfsx2,在同一个ORCL实例中,并导入相同的数据dmp文件。 2. 选择GEO_SERVICE表作为我们要比较的对象。 3. 接下来,为...

    Red Gate SQL+ Compare SQL.Prompt+注册机

    接着,通过运行SQL Compare来比较不同的数据库实例,分析差异,根据需要生成同步脚本,确保开发环境与生产环境的一致性。 总的来说,Red Gate的SQL Compare和SQL Prompt是数据库管理工作中不可或缺的工具,它们结合...

    Protues仿真实例-MEGA16-T1_Compare.rar

    标题中的"Protues仿真实例-MEGA16-T1_Compare.rar"表明这是一个关于使用Protues软件进行ATmega16微控制器的定时器1比较模式的仿真实例。Protues是一款强大的电路仿真软件,常用于电子工程教育和设计中,它允许用户在...

Global site tag (gtag.js) - Google Analytics