CompareUtil
java
package com.daojia.beauty.open.utils; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
import java.util.Comparator; /**
* 数据比较<br />
*/
public class CompareUtil { private static final Logger LOGGER = LoggerFactory.getLogger(CompareUtil.class); /**
*
*/
private CompareUtil() { }
/**
* 数据比较
* @param compare1
* @param compare2
* @param <T>
* @return 0-->相等 , >0 小于 , <0 大于 , null --> 异常情况
*/
public static <T> Integer compare(T compare1 , T compare2 ) {
if(compare1.getClass() != compare2.getClass()) {
throw new IllegalArgumentException("参与比较的两个对象必须属于一个类");
} Method method = isComparable(compare1.getClass()) ; Integer results = null ; if(method == null) {
throw new UnsupportedOperationException("当前类没有实现Comparable或Comparator接口");
}
try {
results = (Integer)method.invoke(compare1, compare2);
return results;
}catch (Exception e) {
LOGGER.error("反射比较对象大小出现异常",e);
}
return results;
} /**
* 判断是否可比较
* @return
*/
private static Method isComparable(Class cls) { Class[] interfaces = cls.getInterfaces();
Method method = null;
try {
for (Class cs : interfaces) {
if (cs == Comparable.class) {
method = cls.getMethod("compareTo", cls);
}
if (cs == Comparator.class) {
method = cls.getMethod("compare",cls);
}
}
} catch (Exception exception) {
LOGGER.error("反射获取比较对象的compareTo和compare方法出错",exception);
}
return method;
}
}
CompareUtil的更多相关文章
- 多字段 java对象排序
public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexUtil.class); //getMet ...
- 深入理解C#泛型
前面两篇文章介绍了C#泛型的基本知识和特性,下面我们看看泛型是怎么工作的,了解一下泛型内部机制. 泛型内部机制 泛型拥有类型参数,通过类型参数可以提供"参数化"的类型,事实上,泛型 ...
- Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)
Java 反射类:ReflexUtil public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexU ...
- java编程排序之内置引用类型的排序规则实现,和自定义规则实现+冒泡排序运用
第一种排序:[冒泡排序]基本数据类型的排序. [1]最简易的冒泡排序.效率低.因为比较的次数和趟数最多. /** * 最原始的冒泡排序. * 效率低. * 因为趟数和次数最多.都是按最大化的循环次数进 ...
- java怎么比较两个实体类的属性值
分享一下比较两个实体类的工具包 package cn.mollie.utils; import java.beans.Introspector; import java.beans.PropertyD ...
- 开源流程引擎Camunda BPM如何扩展数据库表
前言 在使用开源流程引擎(如:JBPM.Activiti.Flowable.Camunda等)的时候,经常会遇到这样的需求,我们需要按照业务需求增加一张数据库的表,而且这张表是跟工作流引擎有交互的(注 ...
随机推荐
- Collections常用方法总结
public class CollectionsTest { public static void main(String[] args) { List<Integer> list = n ...
- fckeditor的简单使用
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEnco ...
- Hibernate查询语言——HQL
HQL(Hibernate Query Language)查询语言是完全面向对象的查询语言,它提供了更加面向对象的封装,可以理解如多态.继承和关联. HQL的基本语法如下: select " ...
- Seajs的用法
以前经常听到Seajs,但是没深入了解过,不清楚到底是用做哪个方面,后来调组到M站做开发,发现项目用到了Seajs,便去了解下 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实 ...
- 12.25模拟赛T2
https://www.luogu.org/blog/a23333/post-xing-xuan-mu-ni-sai-path-ji-wang-zui-duan-lu 如果设f[i]表示从i到n的期望 ...
- 使用adobe pdf去除PDF文档中的批量雷同文本
一.问题的提出 MgoSoft tiff to pdf软件没有提供中国地区的非VISA用户的购买渠道,中国通常都是银联标识走天下,卡不是VISA买不了这样的软件, 那么, MgoSoft tiff t ...
- vue-transition-fade
<!Doctype> <html> <head> <meta charset="utf-8"> <meta name=&quo ...
- VC遍历窗体控件的实现
最近在写控制台,在设计界面按钮风格时不想通过每个按钮的ID来获取其句柄,而是通过遍历窗体所有控件,然后判断其控件类型进而来实现. 代码如下: // 遍历得到页面中的所有Button控件,依次设定其样式 ...
- 程序员的那些问题---转载自veryCD
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过 ...
- Dozer数据对象转换神器
Dozer数据对象转换神器