`
xiaoliang330
  • 浏览: 117095 次
  • 性别: 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)`,这个方法需要比较两...

    集成运放 电压比较器 迟滞比较器 窗口比较器

    集成运放电压比较器迟滞比较器窗口比较器 本文主要讲解了集成运放电压比较器迟滞比较器窗口比较器的知识点。集成运放电压比较器是一种基本的电路单元,广泛应用于模拟电路和数字电路的接口、电平检测、波形产生和...

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

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

    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 一、实验目的 本实验的目的在于掌握电压比较器的电路构成及特点,掌握比较器的使用方法,并通过实验掌握电压比较器的工作原理和应用。 二、实验原理 ...

    "深度定制:无感方波与FOC控制技术,融合比较器方案与EKF磁链观测,高频龙波注入与纯手写代码实现,Simulink仿真支持","定制无感方波与FOC控制,高效代码手写实现:比较器方案、无感过零策略及

    "深度定制:无感方波与FOC控制技术,融合比较器方案与EKF磁链观测,高频龙波注入与纯手写代码实现,Simulink仿真支持","定制无感方波与FOC控制,高效代码手写实现:比较器方案、无感过零策略及磁链ekf、高频龙波格...

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

    而比较器(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扮演着重要的角色,特别...

    滞回电压比较器仿真

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

    详解什么是迟滞比较器

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

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

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

    用C#写的一个比较器

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

    LM311各种比较器电路的实现

    高灵活性的电压比较器

    对比Java中的Comparable排序接口和Comparator比较器接口

    Comparator是一个比较器接口,它提供了一种在类本身不支持排序的情况下控制对象次序的方式。通过实现Comparator接口,你可以创建一个独立于原始类的比较逻辑,这使得排序更灵活。Comparator接口包含两个方法:`...

Global site tag (gtag.js) - Google Analytics