为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据属性比较来自同一类的对象?

如何根据属性比较来自同一类的对象?

一只萌萌小番薯 2021-12-10 14:40:57
我有这个对象:COSTOS Costos = new COSTOS(1781, 359.13, "BISAG.SUP.PUER.TRA.I", "67550T9AT00ZZ");        COSTOS Herramienta = new COSTOS(1795, 299.11, "BISAG.INF.PUER.TRA.I", "67960T2MT02ZZ");这是我的课:public class COSTOS implements Comparable<COSTOS>{    public int referencia;    public double monto;    public String descripcion;    public String NumeroParte;    //Constructor    //getters setters另外,我实现了 HashCode 并等于:@Override    public int hashCode() {        final int prime = 31;        int result = 1;        result = prime * result + ((NumeroParte == null) ? 0 : NumeroParte.hashCode());        result = prime * result + ((descripcion == null) ? 0 : descripcion.hashCode());        long temp;        temp = Double.doubleToLongBits(monto);        result = prime * result + (int) (temp ^ (temp >>> 32));        result = prime * result + referencia;        return result;    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        COSTOS other = (COSTOS) obj;        if (NumeroParte == null) {            if (other.NumeroParte != null)                return false;        } else if (!NumeroParte.equals(other.NumeroParte))            return false;        if (descripcion == null) {            if (other.descripcion != null)                return false;        } else if (!descripcion.equals(other.descripcion))            return false;        if (Double.doubleToLongBits(monto) != Double.doubleToLongBits(other.monto))            return false;        if (referencia != other.referencia)            return false;        return true;    }我如何实现一种可以打印所有不等于的属性的方法?我尝试使用“import java.util.Objects;” 使用:“Objects.hash(referencia, monto, descripcion, NumeroParte);”,这样可以给我打印的结果
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

如果我正确理解您的要求,您想打印出两个对象中不相同的属性值,那么您可以创建如下方法。


public void compareAttributes(COSTOS other) {

    if (this.getMonto() != other.getMonto()) {

       System.out.println("Not equal. This obj : " + this.getMonto() 

                        + " Other obj : " + other.getMonto());

    }


    // you can do the same for the remaining attributes.

}

编辑:


正如@Andreas 在评论中指出的,您应该将此方法放在您的COSTOS类本身中,以便可以轻松比较每个对象。


查看完整回答
反对 回复 2021-12-10
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

首先,可以使用ObjectsJava 7 中添加的空安全辅助方法来简化您的方法:


@Override

public int hashCode() {

    final int prime = 31;

    int result = 1;

    result = prime * result + Objects.hashCode(this.NumeroParte);

    result = prime * result + Objects.hashCode(this.descripcion);

    result = prime * result + Double.hashCode(this.monto);

    result = prime * result + this.referencia;

    return result;

}


@Override

public boolean equals(Object obj) {

    if (this == obj)

        return true;

    if (obj == null || getClass() != obj.getClass())

        return false;

    COSTOS other = (COSTOS) obj;

    return (Objects.equals(this.NumeroParte, other.NumeroParte)

         && Objects.equals(this.descripcion, other.descripcion)

         && Double.doubleToLongBits(this.monto) == Double.doubleToLongBits(other.monto)

         && this.referencia == other.referencia);

}

我如何实现一种可以打印所有不等于的属性的方法?


要打印差异,请执行与equals方法相同的比较:


public void printDifferences(COSTOS other) {

    if (! Objects.equals(this.NumeroParte, other.NumeroParte))

        System.out.println("Different NumeroParte: " + this.NumeroParte + " != " + other.NumeroParte);

    if (! Objects.equals(this.descripcion, other.descripcion))

        System.out.println("Different descripcion: " + this.descripcion + " != " + other.descripcion);

    if (Double.doubleToLongBits(this.monto) != Double.doubleToLongBits(other.monto))

        System.out.println("Different monto: " + this.monto + " != " + other.monto);

    if (this.referencia != other.referencia)

        System.out.println("Different referencia: " + this.referencia + " != " + other.referencia);

}


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号