项目中需要对一些数据进行排序,应用到了个比较强大的比较器,感觉还是很不错的,贴上代码:
public class XXXComparator<E> {
private final Logger log = Logger.getLogger(XXXComparator.class);
@SuppressWarnings({ "unchecked", "rawtypes" })
public void sort(List<E> list, final String method, final String sortType) {
// list 要比较的list 对象列表
// method传入相应的get方法签名
// sortType desc or asc
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try {
Method m1 = ((E) a).getClass().getMethod(method, null);
Method m2 = ((E) b).getClass().getMethod(method, null);
if (sortType != null && "desc".equals(sortType)) {
ret = m2.invoke(((E) b), null).toString()
.compareTo(m1.invoke(((E) a), null).toString());
} else {
ret = m1.invoke(((E) a), null).toString()
.compareTo(m2.invoke(((E) b), null).toString());
}
} catch (NoSuchMethodException e) {
log.error(e);
} catch (InvocationTargetException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return ret;
}
});
}
}
比如我有一个People对象,里面有 name, age 等属性,
现在我有一个People的list列表,需要进行排序,如按name或者age排
好了,可以这么写:
XXXComparator<People> sortList = new XXXComparator<People>();
String method = "getName"; //or 'getAge'
String orderByType = "desc";
sortList.sort(peopleList, method, orderByType);
这样就可以实现按 属性排序了
对以上comparator进行了优化,如果类型为int的数据应用以上方法会存在问题
public class XXXComparator<E> {
private final Logger log = Logger.getLogger(XXXComparator.class);
@SuppressWarnings({ "unchecked", "rawtypes" })
public void sort(List<E> list, final String methodName, final String sortType) {
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try {
Method method = a.getClass().getMethod(methodName);
Object aResult = method.invoke(a);
Object bResult = method.invoke(b);
if (aResult == null) {
return -1;
}
if (bResult == null) {
return 1;
}
if (aResult instanceof String) {
String com1 = "desc".equals(sortType) ? (String) aResult : (String) bResult;
String com2 = "desc".equals(sortType) ? (String) bResult : (String) aResult;
log.info("aResult= " + aResult + "\nbResult= " + bResult);
return com1.toLowerCase().compareTo(com2.toLowerCase());
}
if (aResult instanceof Comparable) {
Comparable com1 = "desc".equals(sortType) ? (Comparable) aResult
: (Comparable) bResult;
Comparable com2 = "desc".equals(sortType) ? (Comparable) bResult
: (Comparable) aResult;
return com1.compareTo(com2);
}
} catch (NoSuchMethodException e) {
log.error(e);
} catch (InvocationTargetException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return ret;
}
});
}
}
分享到:
相关推荐
PSIM中滞环控制器,环宽、频率、占空比等等可以自己设定。
`Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`java.util`包中,它包含了一个方法`compare(T o1, T o2)`,这个方法需要比较两...
本文将详细介绍如何利用Quartus 18.0进行四位比较器的设计与仿真。 四位比较器是一种数字逻辑电路,它的主要功能是对比两个四位二进制数的大小。在Quartus 18.0中,我们可以用VHDL或Verilog等硬件描述语言来编写...
在电子电路设计中,过零比较器是一种常用的基础电路,它具有将交流信号转换为同频率的双极性矩形波的能力。这种转换在测量正弦波的频率、相位以及其他信号处理中非常有用。TLV3501是一款高性能的过零比较器,适用于...
在Java编程语言中,`DynamicComparator`是一种实现比较器(Comparator)的方式,它允许在运行时根据特定条件来比较对象。这种技术对于处理多种比较逻辑或者需要灵活改变比较规则的场景非常有用。本文将深入探讨Java...
通过实现`Comparator`接口,可以定义一个比较器,用于比较两个对象并确定它们之间的顺序关系。 ### 2. 代码示例分析 在提供的代码中,我们看到了一个具体的`Comparator`实现——`ComparatorObject`类。这个类被...
Java Comparator比较器实例解析 Java Comparator是一种强大的比较器接口,通过实现Comparator接口,可以自定义比较规则,实现对对象的排序和比较。本文将详细介绍Java Comparator比较器实例解析,通过示例代码介绍...
在电子设计领域,模拟比较器(Comparator)是一种重要的电路组件,用于比较两个电压信号的大小。在本主题中,我们将深入探讨如何在基于AVR mega16微控制器的系统中应用模拟比较器(ICC,也称为内部比较器)。AVR ...
而比较器(Comparator)是一种专门用于比较两个电压大小的电路,其输出状态仅取决于两个输入端电压的相对大小。尽管运算放大器和比较器在功能上有相似之处,但在设计目的、性能参数和应用场景方面存在显著差异。以下...
八位比较器是一种数字逻辑电路,它用于比较两个八位二进制数的大小关系。在数字系统设计中,VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种广泛使用的硬件描述语言,能够用来设计...
在数字逻辑设计中,比较器是一种常见的数字电路,用于比较两个二进制数的大小。在本场景中,我们讨论的是一个使用Verilog硬件描述语言(HDL)编写的4位比较器。Verilog是一种广泛使用的语言,用于描述数字系统的硬件...
STM32F0系列微控制器中的比较器(Comparator, COMP)是一种用于模拟信号处理的外设,它可以比较两个模拟信号并根据比较结果输出相应的数字信号。在STM32F0的培训材料中,第12章专门介绍了比较器的特性、配置、应用...
在本篇AVR学习笔记中,我们将深入探讨模拟比较器(Analog Comparator)和模数转换器(ADC,Analog-to-Digital Converter)这两个在微控制器应用中至关重要的概念,特别是针对AVR系列微控制器。这两者都是数字系统与...
此外,确保comparator的输出端都连接缓冲器,以消除电容负载对offset的影响。 2. 激励信号选择:使用斜坡信号作为输入,因为斜坡信号能全面揭示offset的范围。vpwl的设置应与ADC的分辨率和时钟周期相匹配。 3. ...
给定的代码实现了一个通用的比较器类`Comparators`,该类提供了一个静态方法`getComparator()`,用于返回一个实现了`java.util.Comparator`接口的匿名内部类实例。这个比较器能够处理不同类型的对象:字符串(`...
在TypeScript中编写有用的比较器函数是提升代码质量和可维护性的重要技巧。比较器函数主要用于对数据进行排序、过滤或查找,特别是在数组操作中。理解如何有效地定义和使用比较器函数,可以让你的JavaScript(以及...
滞回电压比较器的仿真,利用multisim软件进行制作。可以被大多数工科学生所使用
高灵活性的电压比较器
在这个过程中,定义比较器(Comparator)是一种灵活且强大的方法,它允许我们自定义元素之间的比较规则。本文将深入探讨如何定义比较器来比较数组中值的大小,并通过一个具体的示例进行说明。 首先,我们需要了解...
hbase 自带的Comparator只能进行字符串的比较,不能进行数值比较,通过自定义代码实现该功能。 具体使用请参考 http://blog.csdn.net/mtj66/article/details/52574739