8
回答
Java对象指定字段进行比较

Java 两个不同的对象,但是字段完全相同,如何通过其中指定的某些字段来比较这两个对象是否相同?

业务要求是: 通过对象比较,查看对象的特定字段的值是否被更新了。

举报
飘逸的逸
发帖于4年前 8回/1K+阅
共有8个答案 最后回答: 3年前
xx.class.getDeclaredFields()获取对象的属性进行循环
然后调用getDeclaredField(String name)获得属性值进行比较就行了



--- 共有 1 条评论 ---
飘逸的逸恩,最终也想到了这个办法 4年前 回复
commons-beanutils 如果项目里面有这个包的话,可以考虑直接用org.apache.commons.beanutils.BeanComparator
--- 共有 3 条评论 ---
飘逸的逸回复 @逝水fox : 对于小程序,不是经常调用的功能(就像网站的更新个人资料),性能我觉得没必要太过在意,如果调用很频繁,是要考虑。 4年前 回复
逝水fox回复 @zwqlive : 你说的两个我也都看过,但是反方面来说,Commons的比较通用,没有太多使用限制,而且要求的比较功能是现成的,不需要再自己写。选择什么,看使用者的权衡了,而不是单性能来论事 4年前 回复
zwqliveApache的BeanUtil性能不如spring 的beanUtils和Cglib的BeanCopier 4年前 回复
实现Comparable接口,实现comparato方法
package com.cmicroentropy.soa.util;

import java.util.Comparator;

import com.cmicroentropy.soa.vo.homemap.EnergyListVo;

public class ComparatorEnergyList implements Comparator<EnergyListVo> {

	private Integer kpitype;
	private Integer desc;

	public ComparatorEnergyList() {

	}

	public ComparatorEnergyList(Integer kpitype, Integer desc) {
		this.kpitype = kpitype;
		this.desc = desc;
	}

	@Override
	public int compare(EnergyListVo arg0, EnergyListVo arg1) {

		EnergyListVo energyListVo1 = arg0;
		EnergyListVo energyListVo2 = arg1;

		int x = -1;
		int y = -1;
		for (int i = 0; i < energyListVo1.getField().size(); i++) {
			if(energyListVo1.getField().get(i).getKpitype()!=null){
				if (energyListVo1.getField().get(i).getKpitype().compareTo(kpitype) == 0) {
					x = i;
				}
			}
			
		}

		for (int j = 0; j < energyListVo2.getField().size(); j++) {
			if(energyListVo2.getField().get(j).getKpitype()!=null){
				if (energyListVo2.getField().get(j).getKpitype().compareTo(kpitype) == 0) {
					y = j;
				}
			}
			
		}
		int args = 0;
		if (x != -1 && y != -1) {
			args = energyListVo2.getField().get(y).getAreavalue()
					.compareTo(energyListVo1.getField().get(x).getAreavalue());
		}
		return args;

	}

	public Integer getKpitype() {
		return kpitype;
	}

	public void setKpitype(Integer kpitype) {
		this.kpitype = kpitype;
	}

	public Integer getDesc() {
		return desc;
	}

	public void setDesc(Integer desc) {
		this.desc = desc;
	}

}



顶部