`
xiaoliang330
  • 浏览: 116392 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

手写比较器comparator

 
阅读更多
项目中需要对一些数据进行排序,应用到了个比较强大的比较器,感觉还是很不错的,贴上代码:


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;
            }
        });
    }

}





分享到:
评论

相关推荐

    hysteresis-comparator.rar_PSIM中比较器_PSIM中的比较器_PSIM比较器_PSIM滞环_psim

    PSIM中滞环控制器,环宽、频率、占空比等等可以自己设定。

    List对象集合的排序:比较器Comparator(简单例子)

    `Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`java.util`包中,它包含了一个方法`compare(T o1, T o2)`,这个方法需要比较两...

    STM32L4比较器(COMP)介绍.pdf

    ### STM32L4 比较器 (COMP) 详细介绍 #### 一、概述 在微控制器领域,STM32L4系列以其卓越的性能和低功耗特性备受推崇。其中,比较器(COMP)作为STM32L4的重要组成部分之一,在多种应用场合下发挥着关键作用。...

    quartus18.0编译仿真的四位比较器

    本文将详细介绍如何利用Quartus 18.0进行四位比较器的设计与仿真。 四位比较器是一种数字逻辑电路,它的主要功能是对比两个四位二进制数的大小。在Quartus 18.0中,我们可以用VHDL或Verilog等硬件描述语言来编写...

    TLV3501过零比较器电路设计

    在电子电路设计中,过零比较器是一种常用的基础电路,它具有将交流信号转换为同频率的双极性矩形波的能力。这种转换在测量正弦波的频率、相位以及其他信号处理中非常有用。TLV3501是一款高性能的过零比较器,适用于...

    fpga通过vivado实现比较器

    在本文中,我们将深入探讨如何使用Xilinx的Vivado工具在FPGA(Field Programmable Gate Array)上实现一个比较器。FPGA是一种可编程逻辑器件,它允许开发者根据需求自定义硬件逻辑,广泛应用于数字信号处理、图像...

    程序实现时间排序Comparator

    通过实现`Comparator`接口,可以定义一个比较器,用于比较两个对象并确定它们之间的顺序关系。 ### 2. 代码示例分析 在提供的代码中,我们看到了一个具体的`Comparator`实现——`ComparatorObject`类。这个类被...

    java比较器comparator使用示例分享

    Java中的`Comparator`接口是用于定制排序规则的关键工具,它允许我们按照自定义的方式对对象进行排序。在Java集合框架中,例如`ArrayList`、`LinkedList`等,我们可以使用`Collections.sort()`方法对集合进行排序,...

    模电电压比较器仿真实验

    模电电压比较器仿真实验 模电电压比较器仿真实验_report 一、实验目的 本实验的目的在于掌握电压比较器的电路构成及特点,掌握比较器的使用方法,并通过实验掌握电压比较器的工作原理和应用。 二、实验原理 ...

    模拟比较器(ICC)

    在电子设计领域,模拟比较器(Comparator)是一种重要的电路组件,用于比较两个电压信号的大小。在本主题中,我们将深入探讨如何在基于AVR mega16微控制器的系统中应用模拟比较器(ICC,也称为内部比较器)。AVR ...

    运算放大器为什么不能用作比较器

    而比较器(Comparator)是一种专门用于比较两个电压大小的电路,其输出状态仅取决于两个输入端电压的相对大小。尽管运算放大器和比较器在功能上有相似之处,但在设计目的、性能参数和应用场景方面存在显著差异。以下...

    八位比较器基于VHDL语言编写

    八位比较器是一种数字逻辑电路,它用于比较两个八位二进制数的大小关系。在数字系统设计中,VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种广泛使用的硬件描述语言,能够用来设计...

    verilog4位比较器

    在数字逻辑设计中,比较器是一种常见的数字电路,用于比较两个二进制数的大小。在本场景中,我们讨论的是一个使用Verilog硬件描述语言(HDL)编写的4位比较器。Verilog是一种广泛使用的语言,用于描述数字系统的硬件...

    AVR学习笔记六、模拟比较器和ADC实验

    在本篇AVR学习笔记中,我们将深入探讨模拟比较器(Analog Comparator)和模数转换器(ADC,Analog-to-Digital Converter)这两个在微控制器应用中至关重要的概念,特别是针对AVR系列微控制器。这两者都是数字系统与...

    java Comparator 用法 例子

    Java中的Comparator接口是排序的关键工具,它允许程序员自定义对象的比较规则,从而在集合、数组或树结构(如TreeSet、TreeMap)中实现定制化的排序。在Java的Collections框架中,Comparator扮演着重要的角色,特别...

    Comparator

    Comparator是一款专为IT专业人士设计的文件比对工具,它的主要功能是进行文件内容的比较,并生成详细的对比报告。这个工具支持多种文件格式,包括ITD(可能是特定的项目文档格式)、DOC(Microsoft Word文档)以及...

    滞回电压比较器仿真

    滞回电压比较器的仿真,利用multisim软件进行制作。可以被大多数工科学生所使用

    详解什么是迟滞比较器

    迟滞比较器又可理解为加正反馈的单限比较器。 单限比较器,如果输入信号Uin在门限值附近有微小的干扰,则输出电压就会产生相应的抖动(起伏)。在电路中引入正反馈可以克服这一缺点。图1a给出了一个迟滞比较器,人们...

    AVR单片机 模拟比较器范例实验.rar AVR单片机 模拟比较器范例实验.rar

    1. **模拟比较器配置**:AVR单片机的模拟比较器可以通过寄存器配置,例如ACSR(Analog Comparator Control and Status Register)来设定参考电压、使能比较器、选择输入引脚等。 2. **参考电压**:参考电压可以是...

    用C#写的一个比较器

    在编程领域,比较器(Comparator)是一个非常重要的概念,它主要用于自定义对象的排序规则。在C#中,我们可以创建自己的比较器类来实现特定类型的比较逻辑。本实例将深入探讨如何使用C#编写一个比较器,以及在实际...

Global site tag (gtag.js) - Google Analytics