`

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.     }  
 

分享到:
评论

相关推荐

    【疾病分类】 GUI SVM大脑疾病(脑瘤)和神经疾病(动脉瘤)分类【含Matlab源码 4093期】.zip

    【疾病分类】 GUI SVM大脑疾病(脑瘤)和神经疾病(动脉瘤)分类【含Matlab源码 4093期】

    【图像边缘检测】小波变换图像边缘检测【含Matlab源码 4142期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    HC200-10标定版描述文件及标定版ps文件

    HC200-10标定版描述文件及标定版ps文件

    【图像融合】双树复小波变换像素级图像融合【含Matlab源码 2024期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    顾客模具验收鉴定报告.doc

    顾客模具验收鉴定报告.doc

    2020年度SaaS企业 TOP100.docx

    2020年度SaaS企业 TOP100.docx

    9培训申请单.xls

    9培训申请单.xls

    23数据技术 森林火灾预测系统 高品琦 商业计划书.docx

    23数据技术 森林火灾预测系统 高品琦 商业计划书.docx

    【图像重建】离散余弦变换DCT图像重建(MSE、PSNR、压缩比)【含Matlab源码 2403期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    风险与机会评价与应对策划表.xls

    风险与机会评价与应对策划表.xls

    31客户满意度汇总表.xls

    31客户满意度汇总表.xls

    【图像融合】 DSIFT多聚焦图像融合【含Matlab源码 2224期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像压缩】奇异值分解SVD灰色图像压缩(可设置压缩比)【含Matlab源码 4358期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像分割】全局和局部多特征融合的红外图像分割主动轮廓模型【含Matlab源码 4024期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【车牌识别】 GUI BP神经网络车牌识别(带面板)【含Matlab源码 858期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于 YOLOv5 的对象检测算法的系统

    与大学团队合作,设计一个包含 Raspberry Pi、摄像头模块和基于 YOLOv5 的对象检测算法的系统。• 开发了能够识别和分类各种交通标志的实时交通标志检测和分类系统

    python读取excel到数据库中,简单的数据库管理脚本

    python读取excel数据 python读取excel到数据库中,简单的数据库管理脚本

    成本中心领(退)料单.XLS

    成本中心领(退)料单.XLS

    【图像融合】高分辨率全色图PCA图像融合(含评价指标)【含Matlab源码 2407期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【图像去噪】非线性扩散PM算法图像去噪【含Matlab源码 2130期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

Global site tag (gtag.js) - Google Analytics