java 比较两对象的方法

炸金花游戏(3)--基于EV(期望收益)的简单AI模型 前言:   炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章:  德州扑克AI--Programming Poker AI(译).  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运... 阅读详情

如果对象是bean

import java.lang.reflect.Field;

 public static <T> Map<String, String> compare(T obj1, T Obj2)  
        throws Exception {  
  
    Map<String, String> result = new HashMap<String, String>();  
  
    Field[] fs = obj1.getClass().getDeclaredFields();  
    for (Field f : fs) {  
        f.setAccessible(true);  
        Object v1 = f.get(obj1);  
        Object v2 = f.get(Obj2);  
        result.put(f.getName(), String.valueOf(equals(v1, v2)));  
    }  
    return result;  
}  
 public static boolean equals(Object obj1, Object obj2) {  
  
    if (obj1 == obj2) {  
        return true;  
    }  
    if (obj1 == null || obj2 == null) {  
        return false;  
    }  
    return obj1.equals(obj2);  
}  


如果对象是集合(集合中存map)

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


import org.apache.commons.lang.builder.EqualsBuilder;


/**
 * 比较的工具类
 * @author Carsomyr
 *
 */
public class CompareUtil {

/**
* 比较两个Collections中的数据是否一致
* @param source1
* @param source2
* @param primaryKey : {Collections中元素主键字段,唯一确定一个元素,为空则按原始顺序比较}
* @param specifiedFields : {指定比较的特定字段,为空则比较所有字段}
* @return
*/
public static boolean compare(List<PageData> source1, List<PageData> source2, final String primaryKey, String[] specifiedFields){
boolean isEqual = true;

if(source1==null && source2!=null){
isEqual = false;
}else if(source1!=null && source2==null){
isEqual = false;
}else if(source1.size()!=source2.size()){
isEqual = false;
}else{
if(primaryKey!=null && !primaryKey.trim().equals("")){//按照主键排序,确保后续按相同的下标拿到的数据是相互对应的
Comparator<PageData> comparator = new Comparator<PageData>() {


@Override
public int compare(PageData o1, PageData o2) {
if(o1.getString(primaryKey)==null || o1.getString(primaryKey).trim().equals(""))
return 1;
else if(o2.getString(primaryKey)==null || o2.getString(primaryKey).trim().equals(""))
return -1;
else 
return o1.getString(primaryKey).compareTo(o2.getString(primaryKey));
}
}; 

Collections.sort(source1, comparator);
Collections.sort(source2, comparator);
}

PageData pd1 = null;
PageData pd2 = null;
for(int i=0, j=source1.size(); i<j; i++){
pd1 = source1.get(i);
pd2 = source2.get(i);

if(!CompareUtil.isEqual(pd1, pd2, specifiedFields)){
isEqual = false;
break;
}
}
}

return isEqual;
}


/**
* 判断两个PageData的值是否一致
* @param pd1
* @param pd2
* @param specifiedFields
* @return
*/
@SuppressWarnings("rawtypes")
private static boolean isEqual(PageData pd1, PageData pd2, String[] specifiedFields) {
EqualsBuilder equalsBuilder = new EqualsBuilder();

boolean isEqual = true;
if(specifiedFields!=null){
for (String field : specifiedFields) {
equalsBuilder.append(pd1.getString(field), pd2.getString(field));
}
isEqual = equalsBuilder.isEquals();
} else {
Set pd1Set = pd1.keySet();
Set pd2Set = pd2.keySet();

if(pd1Set==null && pd2Set!=null){
isEqual = false;
} else if(pd1Set!=null && pd2Set==null){
isEqual = false;
} else if(pd1Set.size()!=pd2Set.size()){
isEqual = false;
} else {
Iterator iter = pd1Set.iterator();
Object pd1Key = null;

while(iter.hasNext()){//若两个PageData的key不一致,视为不同
pd1Key = iter.next(); 
if(!pd2.containsKey(pd1Key)){
isEqual = false;
break;
}
}

if(isEqual){//当两个PageData的key一致,但相同的key对应了不同的值,视为不同,否则视为相同
iter = pd1Set.iterator();

while(iter.hasNext()){
pd1Key = iter.next();

equalsBuilder.append(pd1.get(pd1Key), pd2.get(pd1Key));
}

isEqual = equalsBuilder.isEquals();
}
}
}

return isEqual;
}
}


【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体 《Arduino迷你拉斯维加斯球体项目:15岁少年的创意挑战》 15岁的Ben通过本项目展示了如何利用Arduino平台制作一个经济实惠的迷你拉斯维加斯球体夜灯。该项目涉及LED选择(采用WS2812B可编程灯带)、电子元件配置(含Arduino Nano微控制器和红外遥控)以及3D建模设计(100毫米直径球体)。项目难点包括LED布局优化、供电方案设计和3D打印外壳制作。Ben详细记录了从背景研究、电路设计到最终实现的完整过程,特别强调了分辨率与成本的平衡,以及如何通过白色扩散器改善视觉效果。这个项目不仅 阅读详情

相关推荐

双极性步进电机驱动技术:从H桥电路到精准控制

本文深入解析了双极性步进电机驱动技术的核心,从H桥电路的基础原理讲起,阐述了其作为实现电机正反转和精准控制的关键。文章详细介绍了H桥的工作模式、防共态导通设计,并对比了L298N、DRV8825及TMC2209等主流集成驱动芯片的选型。进一步探讨了通过微步进与电流矢量控制实现平滑、静音运行的高级技术,并提供了基于STM32的实战代码与避坑指南,帮助开发者从理论到实践全面掌握精准运动控制。

tea88的博客 594

(二十五)Java工具类EqualsBuilder协助Object.equals(object)方法详解

1.EqualsBuilder类基本简介 EqualsBuilder类提供方法为任何类建立良好的equals方法,它遵循Effective java定义的规则,特别是比较double、float、数组的大小是很棘手的,同时,确保equals()和hashcode()一致是很困难的。 两个相等的对象必须生成相同的哈希代码,但是具有相同哈希代码的两个对象不一定相等。 所有的相关字段都应该包含在相...

OceanSky的专栏 4295

PCIe Crosslink

PCIe Crosslink(交叉连接)是一种特殊的PCIe链路连接方式,允许两个PCIe设备(通常是Root Complex或Endpoint)是指两个PCIe设备(如两个CPU、两个FPGA或两个GPU)通过PCIe链路直接连接,形成点对点(P2P)通信通道。:两个Intel/AMD CPU通过PCIe Crosslink直接通信(替代UPI/Infinity Fabric)。:主板需提供PCIe Crosslink连接(如特定插槽支持x16/x8 Crosslink)。

zly8865372的博客 1636

[开发|java] java 比较两个对象的指定属性的值是否相等

在上述代码中,我们在Person类中添加了一个带有可变参数的equals方法。可变参数fields用于指定需要比较的属性名称,可以传入多个属性名称。在方法内部,我们使用反射获取当前对象和另一个对象的指定属性的值,并使用EqualsBuilder类来比较这些属性的值是否相等。Java中比较两个对象的指定属性的值是否相等,可以使用Apache Commons Lang库中的EqualsBuilder类。

梦醒贰零壹柒 3284

Nvidia Isaac Sim图形界面 入门教程 2024(3)

在使用Isaac Sim时,最先接触到的应该是它的图形界面,此处将简单介绍图形界面中常用的一些组件:Isaac Sim的界面的常用内容可以分为几个板块。

m0_56661101的博客 4546

子网划分详解

还不会子网划分?看这篇就够了,保姆级教程

m0_47584619的博客 6093

EqualsBuilder的使用之全等

使用场景 当我们创建一个bean后,往往需要重写它的hashCode方法和equals方法。当bean的属性很多的时候,equals方法的重写将会是个很麻烦的事情。举个栗子: public class Status { private String Id; private String Name; private String Left; private String Top; private String Width; private Strin...

java_2017_csdn的博客 894

不用加速器!Google Earth Pro登录失败自救手册:从服务器连接到地图加载的完整排错流程

本文详细解析了Google Earth Pro登录失败的常见问题及解决方案,包括服务器连接失败、地图加载异常等。通过基础排查、内置修复工具使用和高级配置调整,帮助用户无需加速器即可解决启动问题、黑屏和转圈圈等困扰,提升软件使用体验。

weixin_29227425的博客 482

使用EqualsBuilder简化equals的方法的重写

EqualsBuilder的使用简化重写equals方法

干枯的骆驼的博客 1551

PT静态时序分析实战:从基础命令到高级报告解析

本文详细介绍了PT(PrimeTime)静态时序分析(STA)的实战技巧,从基础命令如pt_shell和report_timing的使用,到高级报告解析与问题排查。通过丰富的实例和脚本示例,帮助工程师快速掌握时序分析的核心技能,提升芯片设计验证效率。

weixin_29289821的博客 954

金蝶K3系统物料主数据后台表对应字段一览

我们说到物料表,一般是指t_icitem,但正确的说t_icitem并不是一张有,而是一张视图,不过我们对于数据库物料表中的大部分操作,都是通过此视图来完成。比如经常通过此视图,来成批修改数量,单价精度,是否启用批次等一些字段,有的时候,对于账套已经启用,并且已经有业务发生的物料,有一些关键属性也需要通过修改物料表t_icitem来进行。 当然修改的时候,需要考虑一些前提条件的。 比如说我有一个客户新建的账套,在月底结账时发现,要改一种成本核算方法,启用时用的是加权平法,现在想改成移动平均法,这样的情况,

hzfw2008的博客 1万+

EqualsBuilder类的使用

apache的commons-lang包提供了一个EqualsBuilder类,提供了基本属性、数组、对象等比较操作的封装,可以辅助实现对象的equals(Object)方法。这个类的使用中需要注意appendSuper(super.equals(obj))方法。

lszzzz的专栏 8791

STM32CubeIDE开发环境搭建与GPIO控制实战

嵌入式开发中,MCU开发环境构建是软硬件协同的起点,其核心在于工具链选型、外设抽象层级与调试可靠性。HAL库作为ST官方标准硬件抽象层,通过统一接口屏蔽芯片差异,显著提升工程可移植性;而STM32CubeIDE则以图形化配置+自动生成代码的方式,实现‘配置即代码’的确定性开发范式。该组合在教学验证、原型迭代和中小规模量产中具备高性价比技术价值,广泛应用于智能传感、工业HMI及IoT终端等场景。本文聚焦STM32CubeIDE 1.15.0环境部署、MyST账户与固件包管理、ST-LINK驱动校验,以及基于H

weixin_33531560的博客 79

java 两个属性_Java两个对象属性比较

A b = new A();b.setUserName("a");b.setPassword("p");b.setQq("q");b.setWechat("ww");//只是比较两个对象是否相等,那么直接重写equals方法System.out.println( a.equals(b));try {Map<String, String> maps = compare( a, b );S...

weixin_34617955的博客 596

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java 对比两个set_Set集合对象比较两个元素的方法

查看两个集合中有没有相同的元素的方法。Collections disjoint在做项目的时候遇到一个种情况,就是要比较两个集合中是否有相同的元素,经过查找资料,找到了Collections类下的disjoint方法下面做的一个小例子: import java.util.Coll ...redis 系列13 集合对象一. 集合对象概述 这里的集合是string类型的无序集合,在集合对象中集合成员是唯...

weixin_35510630的博客 2647

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

比较两个数的较大值 返回较大值

比较两个数的较大值 返回较大值

wbq0501的博客 410

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

如果两个对象的hashCode 值相等并且equals()方法也返回 true,我们才认为这两个对象相等。

在 Java 中,通常认为如果两个对象的 hashcode 值相等并且 equals () 方法也返回 true,我们才认为这两个对象相等。hashCode () 方法的作用是获取哈希码,也称为散列码,它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。例如在 Java 集合中有两类,一类是 List,再有一类是 Set。对于 Set 集合,要保证元素不重复,判断两个元素是否重复应该依据 Object.equals 方法。

Wzideng@qq.com 800

Java中comparator常见比较方法的实例

比较器接口中只有一个方法:compare(Object o1, Object o2),该方法用于比较两个对象。比较器的使用可以实现灵活的排序规则,不依赖于对象的自然排序。它可以按照不同的属性、不同的顺序进行排序,同时也可以处理特定的比较需求,例如忽略大小写比较字符串等。比较器(Comparator)是Java中一个接口,用于定义两个对象之间的比较规则。eg4:比较自定义类对象的字符串属性,根据字符串的字典序排序(忽略大小写)eg3:比较自定义类对象的字符串属性,根据字符串的字典序排序。

2401_85813583的博客 524

方法 比较两个数的较大值 返回较大值

【代码】方法 比较两个数的较大值 返回较大值。

WX5689_789的博客 838

JAVA中对象的几种比较

对象比较的最佳实践总结不同场景下的选择建议未来Java版本中可能的改进提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档比较方式核心作用灵活性适用场景equals()hashCode()判断内容相等低集合去重、逻辑相等判断Comparable自然排序(默认规则)低对象有固定排序规则Comparator定制排序(多规则)高多种排序需求、第三方类排序简化比较 + 空指针防护中JDK 8+ 简洁排序代码选型口诀判相等:重写equalshashCode。

2402_89003542的博客 2649

【Java】 对象的比较【比较器】

Java中,对象之间的比较是开发中经常遇到的任务之一。有三种主要的比较方式:基于比较器比较、基于Comparable接口类的比较以及基于对象的比较(通常是通过重写equals()方法)。实现了Comparator接口的比较器类,可以定义多种不同的比较规则。适用于对外部库的类进行比较或需要多种不同比较规则的情况。基于Comparable实现了Comparable接口的类,可以在类内部定义对象之间的比较规则。

2302_79806056的博客 1520

java对象的比较

java对象比较 文章目录java对象比较元素的比较类的比较集合框架的比较 元素的比较 类的比较 集合框架的比较

weixin_49830664的博客 2万+

Java中对象的比较

一:问题引出 在使用优先级队列(堆)的时候,优先级队列对插入的元素要求必须是可以互相进行比较的元素,并且不能是null。 那么怎么比较自定义类的对象呢? 文章目录一:问题引出二:Java中比较的几种方式2.1 在Java中基本类型可以直接进行比较2.2 对象的比较1.引入从结果中可以看出Java中引用类型的比较不能直接按照‘<’,’>’比较。编译器会报错,那为什么‘==’可以呢?因为对于自定义的类型,都默认的继承了Object类,而Object类中提供了equal方法,而‘==’默认情况下

guankunkunwd的博客 1540

【对象的比较】java代码实现,详解对象的比较,Comparable接口和Comparator比较器

【对象的比较】java代码实现,详解对象的比较,Comparable接口和Comparator比较器

程序员良辰 1924

Java——对象比较

前言 本篇博客主要梳理一下Java中对象比较的需要注意的地方,将分为以下几个方面进行介绍: ==和equals()方法 hashCode()方法和equals()方法 Comparator接口和Comparable接口 和equals()方法 在前面对String介绍时,谈到过使用和equals()去比较对象是否相等。 使用==比较的是两个对象在内存中的地址是否一致,也就是比较两个对象是否为同一个...

qq_44725981的博客 2945

java-比较对象大小的方法

关于对象值大于、等于、小于的比较: 一,基本数值类型(int ,char,short,long,float,double )对象的大小比较可以直接使用比较运算符:> >= < <= == !=。 二,引用类型对象无法用数值去衡量其大小,故可使用(Object.equals ,Comparable<E>,Comparator<E>)去比较引用类型。...

qq_44370562的博客 5217
上一篇: springmvc 利用模板 下载excel
下一篇: 根据地址和关键字查找详细地址经纬度
闲云9134
博客等级 码龄10年 12粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值