Java Compare 总结

Java重写Compare方法 Compare方法重写 今天剑指offer上做到了一道题,需要重写compare方法对List进行排序。之前在书上看到这部分的时候只是一眼带过,转眼就忘。这次做题遇到了,就记录一下重写的方法。 同样先贴一下代码,等之后有时间再深入理解后补充… ArrrayList<String> arr=new ArrayList<String>(); ...//新增集合元素 Collec... 阅读详情

1. Java对Bean排序,可以通过实现Comparator或者Comparable接口

2. Comparator或者Comparable接口可以根据实际的需求来排序,但是如果想用通用的比较方式,可以使用apache的BeanComparator来实现。 具体代码如下

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class Compare {

   /**
     *
     * @param list  需要排序的类别
     * @param fieldName  按照fieldName排序
     * @param asc true升序, false降序
     * @param <T>
     */
    public static <T> void sort(List<T> list, String fieldName, boolean asc) {
        Comparator<?> mycmp = ComparableComparator.getInstance();
        mycmp = ComparatorUtils.nullLowComparator(mycmp); // 允许null
        if (!asc) {
            mycmp = ComparatorUtils.reversedComparator(mycmp); // 逆序
        }
        Collections.sort(list, new BeanComparator(fieldName, mycmp));
    }
}

3.Comparator或者Comparable接口实现以后完善

4.  实现Comparable接口要注意满足三个条件: 

  ComparaTo方法的通用约定与equals方法的通用约定具有相似的特征(自反性,对称性,传递性,非空型)

  如果不满足,会报Comparison method violates its general contract! 异常

 

public class CategoryCompare  implements Comparator<Category> {

    @Override
    public int compare(Category o1, Category o2) {
        if(o1.getLevel() > o2.getLevel()){
            return 1;
        } else {
            return -1;
        }
    }
}

如上代码中,如果两个对象level相同, 不满足自反性 ,应该将level相等的情况考虑进去,修改如下

public class CategoryCompare  implements Comparator<Category> {


    @Override
    public int compare(Category o1, Category o2) {
        if(o1.getLevel() > o2.getLevel()){
            return 1;
        }else if(o1.getLevel() == o2.getLevel()){
            if(o1.getId()> o2.getId()){
                return -1 ;
            }else{
                return 1 ;
            }
        }
        else {
            return -1;
        }
    }
}

未完待续

保姆级教程:用STM32CubeMX HAL库搞定ESP8266连接,附串口printf调试全流程 本文提供了一份详细的STM32CubeMX HAL库教程,指导开发者如何实现ESP8266无线模块的连接与调试。从开发环境搭建、串口配置到AT指令通信解析,涵盖了物联网开发中的关键步骤和常见问题解决方案,帮助开发者快速掌握STM32与ESP8266的集成技术。 阅读详情

相关推荐

别再为下载速度发愁了!手把手教你给qBittorrent/Transmission添加最新可用Tracker(附2024年实测地址清单)

本文提供2024年BT下载加速实战指南,详细解析Tracker工作原理与速度瓶颈,手把手教你为qBittorrent/Transmission添加最新可用Tracker,并附实测地址清单。通过优化配置和精选Tracker列表,显著提升下载速度和稳定性,解决连接延迟和peer数量限制问题。

weixin_28481133的博客 1257

java 两个bean数据对比

java 两个实体对比

weixin_43440893的博客 1330

ODrive0.5.5源码分析(1) ADC的处理

odrive 0.5.5 ADC

danger的博客 4307

java常用BeanCompareUtil 注解 + 反射实现 (实例说明)

文章目录背景使用实例说明使用方式执行效果 背景 在开发过程中经常会使用到一种场景就是比较内存中的两个bean 数据有什么同。其实这种功能算是一个非常常用的场景。 使用实例说明 一共需要以下的几个模块 FieldComparison 自定义注解,主要是标识需要比较的bean 中的字段。 BeanCompareUtil 核心util 主要是实现compare 方法。 FieldMapping 字段映射关系,选用可以对特定的字段进行转义。 DefaultFieldMapping fieldMapping的

wangrui1605的博客 1442

Wireshark实战解析IEC 61850 GOOSE报文:智能变电站通信调试指南

网络协议分析是理解现代工业通信系统的基础,其核心原理在于对数据包的捕获、解码与解析。在电力自动化领域,IEC 61850标准定义了智能变电站内设备间高效、可靠的通信框架,其中GOOSE(通用面向对象变电站事件)协议因其基于以太网多播和快速重传机制,成为保护跳闸、联锁等关键信号传输的基石,其技术价值在于实现了微秒级延迟的高可靠性通信。掌握GOOSE报文的分析能力,对于现场调试、故障定位及系统验证至关重要。本文聚焦于使用Wireshark这一网络分析工具,深入解析GOOSE报文结构,涵盖从以太网帧头、协议标识到

weixin_34401479的博客 374

AutoSar标准官网下载

AutoSar文档下载和文档命名格式。。。

m0_56208280的博客 3512

Java中compare方法

【代码】Java中compare方法。

qq_65848454的博客 7571

SAP MM自动化进阶:STO交货单自动创建的配置与优化

本文深入解析了SAP MM模块中实现公司间库存调拨订单(STO)交货单自动创建的完整配置流程与优化策略。通过激活自动交货与绑定发货点两大核心配置,打通自动化链路。重点探讨了如何集成ATP可用性检查以智能处理库存不足等异常场景,确保自动化流程的可靠性与业务贴合度,并提供了进阶监控与问题排查方法,助力企业显著提升供应链效率。

weixin_29206669的博客 124

Java基础:常用类Compare

Compare类的基本概念和使用方法

weixin_50835087的博客 4678

[ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429

[ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429 可以使用一些编码字符来制作URI,以访问WEB-INF目录的内容和/或绕过一些安全限制。默认合规模式允许带有包含 %u002e 段的 URI 的请求访问WEB-INF目录中的受保护资源。

qq_51577576的博客 3207

【2.12】基于FPGA的Gardner环开发5——闭环反馈,获得完整gardner环

本文介绍了Gardner定时恢复算法在FPGA上的实现过程。首先回顾MATLAB程序中Gardner环的闭环反馈机制,重点分析了环路滤波器输出变量w的处理流程。随后详细阐述了FPGA实现的Verilog设计步骤,包括三个核心模块:1)y_temp=q0-w计算模块,实现反馈变量处理;2)uk=2*q0计算模块,生成插值系数;3)插值计算模块,根据使能信号执行线性插值运算。设计通过引入使能信号控制插值更新时机,采用定点数运算处理数据,并包含负数保护机制确保计算稳定性。文章提供了完整的Verilog代码实现,展

fpga/matlab/simulink算法仿真工程 135

java 如何比较两个 bean_Java比较两个bean数据差异

/*** @Title: CompareObjUtil.java* @Package cc.messcat.common.util* @Description: TODO* @author limh* @date 2017年3月2日*/package cc.messcat.util;import java.lang.reflect.Field;import java.util.ArrayList;...

weixin_35214885的博客 1621

深入理解Android音视频同步机制(三)NuPlayer的avsync逻辑

本文深入介绍了NuPlayer的avsync逻辑和原理

张晖的专栏 1万+

Java compare与compareTo

Java排序接口核心解析 Java提供了两种对象排序方式:Comparable和Comparator。Comparable是对象的自然排序实现,通过compareTo方法定义默认排序规则;Comparator是外部排序策略,通过compare方法实现灵活排序。 compareTo方法遵循"当前对象-比较对象"原则返回整数值,要求满足自反性、对称性和传递性。String的compareTo基于Unicode逐字符比较。 Comparator的优势在于: 支持Lambda表达式简化代码 提供

xxxxxxllllllshi的博客 1048

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java compare总结

接口:Compareable 自然排序 方法 public int compareTo(T o); Comparator 定制排序 方法 public int compare(T lhs, T rhs); public boolean equals(Object object); 在看到优先队列时,想要做一个最大优先队列时 Queue que=new PriorityQueue...

cmsyh的博客 3103

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java compare 和equals,Java中的equals,==,compareTo和compare的比较

Java中的equals(),==,compareTo()和compare()首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的。Object.equals(Object obj)的缺省实现也是比较对象引用(显然它不知道如何比较值),但Java类库中的绝...

weixin_39965794的博客 748

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVA Comparator 重写compare方法

int compare(T o1, T o2); 接口源码描述: Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. 翻译:有序比较它的两个参数,返回一个正数,零或者负数;当第一个参数小于,等于或大于第二个参数。 @th

村里的原振侠的博客 2459

java double.compare_Java Double compare()方法

Java Double compare()方法java.lang.Double.compare()方法比较两个指定的double值。返回整数值符号是相同的,这将通过调用被返回整数:new Double(d1).compareTo(new Double(d2))1 语法public static int compare(double d1, double d2)2 参数d1:这是第一个要比较的do...

weixin_39980596的博客 895

Java Double compare()方法具有什么功能呢?

Java Double compare()方法的功能简介说明

qq_25073223的博客 1167

float compare_Java Float类的compare()方法与示例

float compare 浮动类compare()方法 (Float class compare() method) compare() method is available in java.lang package. compare()方法在java.lang包中可用。 compare() method is used to check equality or inequality of t...

1790

compare()Java_Java Integer compare()用法及代码示例

java.lang包的Integer类的compare()方法比较作为参数给出的两个整数值(x,y),如果(x == y)则返回零,如果(x y),则返回大于零的值。用法:public static int compare(int x, int y)参数:x: the first int to comparey: the second int to compare返回:This method r...

weixin_39926014的博客 2386

java compare equla_Java中的equals,==,compareTo和compare的比较

Java中的equals(),==,compareTo()和compare()首先只有==可以用作两个基本类型数据之间的比较,当然是值比较。当用作两个对象比较时,比较的是对象引用,而不是值比较。其次任何对象都可以调用.equals()方法,因为这是从Object类继承下来的。Object.equals(Object obj)的缺省实现也是比较对象引用(显然它不知道如何比较值),但Java类库中的绝...

weixin_35621029的博客 405

Java compare方法和compareTo方法

1.compare 对于 public int compare(Object arg0, Object arg1)的理解 //数组排序 String[] str = new String[5]; Arrays.sort(str, new Comparator<String>() { @Override public int compare(String o1, String o2) { // TODO Auto-generated method stub .

lonelyVM的博客 4341

java中double..compare_Java Double类compare()方法与示例

Double类compare()法compare()方法在java.lang包中可用。compare()方法用于检查给定两个双精度值的相等或不相等,换句话说,可以说此方法用于比较两个双精度值。compare()方法是一个静态方法,也可以使用类名进行访问,如果尝试使用类对象访问该方法,那么也不会出错。比较双精度值时,compare()方法不会引发异常。语法:publicstaticintcom...

weixin_28848933的博客 7275

java中compare语句的用法_Java RuleBasedCollator compare()用法及代码示例

java.text.RuleBasedCollat​​or类的compare()方法用于比较两个对象的强度,并且根据结果将返回0,正值和负值作为输出。用法:public int compare(Object o1, Object o2)参数:此方法需要两个对象之间进行比较。返回值:如果第一个对象等于,小于或小于另一个对象,则它将分别返回零,正值和负值。异常:如果参数之一为null,则此方法引发Nu...

weixin_39973271的博客 1262

Java:compare、compareTo

我们知道8个基本数据类型都有其对应的包装类,这里就不一一介绍了,我们主要分析compare和compareTo这两个方法。接下来一一演示: 1.Byte: Byte m=2; Byte n=6; System.out.println(Byte.compare(m ,n));//-4 System.out.println((m.compareTo(n)));//-4 2.Short: Short m=2; Short n=6; System.out.println(Short.compar.

weixin_48493408的博客 906
上一篇: 【Linux】fg、bg让你的进程在前后台之间切换(转载)
下一篇: document.ready和onload的区别
yayaqwl
博客等级 码龄13年 28粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值