COMPARABLE - 如何查看对象中的元素是否相等?

COMPARABLE - How to see if elements from objects are equals?

我正在开发一个程序,我将一些元素放入 ArrayList 中的对象中...这是我的代码

import java.util.ArrayList;

public class ListaConcepto {

public static void main(String[] args) {
    // TODO Auto-generated method stub

ArrayList<CompararListas> Lista = new ArrayList<CompararListas>();

    CompararListas obj1 = new CompararListas("abc", 12.25, "lala", 2);
    CompararListas obj2 = new CompararListas("abc", 13.50, "lala", 3);
    CompararListas obj3 = new CompararListas("poc", 12.50, "jaja", 1);

    Lista.add(obj1);
    Lista.add(obj2);
    Lista.add(obj3);

    }    
}

然后...这是我的 class 接口 Comparable...我需要一个方法来实现以查看元素是否相等然后打印结果。

public class CompararListas implements Comparable<CompararListas> {
    private String referencia;
    private double monto;
    private String descripcion;
    private double NumeroParte;


    public CompararListas(String referencia, double monto, String descripcion, double numeroParte) {
        this.referencia = referencia;
        this.monto = monto;
        this.descripcion = descripcion;
        this.NumeroParte = numeroParte;
    }


    public double getMonto() {
        return monto;
    }


    public void setMonto(double monto) {
        this.monto = monto;
    }


    public String getDescripcion() {
        return descripcion;
    }


    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }


    public double getNumeroParte() {
        return NumeroParte;
    }


    public void setNumeroParte(double numeroParte) {
        NumeroParte = numeroParte;
    }


    public String getReferencia() {
        return referencia;
    }


    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }


    @Override
    public int compareTo(CompararListas o) {
        // TODO Auto-generated method stub
        return 0;
    }

}

请记住,Comparable 用于确定项目之间的关系,以便进行订购;这不是 相当 平等。事实上,没有要求任何两个可比较的项目 必须 相等。

在您的情况下,您可能希望按 NumeroParte 排序,这意味着 "Part Number" 似乎是一个明智的选择。每种类型的数据都有不同的组织方式。

您的方法可能类似于

public int compareTo(ComprarListas o){
    return this.NumeroParte - o.getNumeroParte();
}

之所以可行,是因为它们都是整数。

或者您对象的适当 属性 - 例如,您可能希望根据价格订购。

如果你想知道一个对象是否等于另一个你必须实现 equals 方法(它不需要你声明任何接口,每个 class 都可以做到)

@Override
public boolean equals(Object o) {
    CompararListas other = (CompararListas) o;
    return ...  
}

使用此方法,您可以 return 如果您只需要查找 referencia.equals(other.referencia) 或者如果您必须比较每个 属性,例如 referencia.equals(other.referencia) && monto == other.monto && ...

但是,如果您想要比较元素以便执行诸如在此处对它们进行排序之类的操作,则必须实现 Comparable 接口并实现 compareTo 方法

@Override
public int compareTo(CompararListas o) {
    if (NumeroParte < o.NumeroParte)
        return -1;
    else if (NumeroParte > o.NumeroParte)
        return 1;
    return 0;
}

这将使对象能够相互比较,例如根据您的标准知道一个对象是否比另一个对象 "smaller"(在这个例子中我只使用了 NumeroParte 并使其明确以便于理解,但关键是您可以使用任何您想要比较对象的标准,如果您想稍后订购它们)。

这些是针对不同问题的解决方案,您必须根据自己的情况确定哪一种更好。