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等)的时候,经常会遇到这样的需求,我们需要按照业务需求增加一张数据库的表,而且这张表是跟工作流引擎有交互的(注 ...
随机推荐
- Git&GitHub&GitBook
一.定义 Git(分布式版本控制系统) GitHub gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. gitHub于2008年4 ...
- 【积累】根据CheckBox的不选中 ,用JQuery 清除 RidaoButtonList 的选中项
如题,项目要求无刷新更新数据. 1)Web页面布局 Html以及效果图
- C#中的Stack的Peek操作,曝出异常
我们在遍历一个栈的时候,有时候需要判断栈顶元素,用到了Peek元素,然后再用Pop元素,但是这个时候会出现一个逻辑错误, 当用Pop删除全部栈的元素时,再用Peek就会报错, InvalidOpera ...
- springmvc项目搭建五-postgresql+easyui的数据显示
上一篇虽然完成了页面的显示,但是是假数据,本篇添加了postgresql的数据库,将登陆的校验和数据的显示都通过数据库来完成. 我是在本地搭建了一个postgre的数据库,就先新建两张表吧,一个用于用 ...
- ASP.NET MVC如何使用输出缓存
通过这篇文章你将学习到在MVC中如何使用输出缓存,业务逻辑我就不多介绍了,主要是Outputcache的基本使用.至于数据缓存还是等我的下一篇文章吧,一步一步来不急的. 输出缓存的使用方法是在Co ...
- fetch_array()与fetch_assoc()的用法
fetch_array()与fetch_assoc()用起来没有什么大的差别,主要是怎么用?fetch_array()如果单独作为while的条件,则能够取出结果集中的所有结果.如果单独作用于结果集, ...
- vue2.0实现页面刷新时某个input获得focus
通过自定义指令:
- can be found for element 'tx:annotation-driven'
错误描述: ERROR [ContainerBackgroundProcessor[StandardEngine[Catalina]]] (ContextLoader.java:308) - Cont ...
- 在delphi中如何解决空格的问题。。。。烦死 了。。。。
我每次从数据库里面取数据出来和Edit里面的进行比较的时候总是会受到空格的困扰...老是干扰我...如果我用trim 所有都做去掉所有的空格那么这样就非常麻烦又繁琐..有没有什么方法可以忽略空格的.. ...
- [Leetcode] Linked list cycle 判断链表是否有环
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...