【问题标题】:java-project -Comparable Interface [closed]java-project -Comparable 接口
【发布时间】:2021-03-17 23:31:30
【问题描述】:

我正在尝试在 java 中创建一个方法来比较一些产品。我需要按计量单位然后按数量比较它们,但我不知道如何。我需要使用 object.equals 吗? 我会把我的代码放在这里。

public abstract class Produs implements Comparable {
    private String tipProdus;
    private String unitateMasura;
    private int cantitate;

    public Produs(String tipProdus, String unitateMasura, int cantitate) {
        super();
        this.tipProdus = tipProdus;
        this.unitateMasura = unitateMasura;
        this.cantitate = cantitate;
    }

    public Object genereazaDescriere() {
        Object String = null;
        return String;

    }
    public void compareTo() {
        tipProdus.equals(unitateMasura);{
            
        }
    }
}

【问题讨论】:

  • 这能回答你的问题吗? How to compare objects by multiple fields
  • 我不这么认为,我有一些产品,所以它们是字符串,我认为我需要使用.equals
  • 你想通过检查tipProdus.equals(unitateMasura)来在我们的代码中实现什么??你看过Comparable javadoc - 你的代码根本没有实现类似的接口。 This link 给出了一些正确实现的例子。此外,您似乎需要了解如何比较具有不同unitateMasura 的对象,很可能应该进行一些转换(例如英寸到毫米等)

标签: java class object interface comparable


【解决方案1】:

首先,您不能从抽象类创建对象,因此您需要对其进行更改,或者忘记该构造函数,因为您将无法使用它。 要比较两个对象,您需要创建一个比较器类,以便能够根据您想要的属性比较对象。 因此,在这种情况下,您需要创建两个比较器,一个按度量单位进行比较,另一个按数量进行比较。 所以它会是这样的:

按计量单位的比较器:

public class UnitOfMeasureProdusComparator implements Comparator<Produs> {
    @Override
    public int compare(Produs p1, Produs p2) {
      return p1.getUnitateMasura().compareTo(p2.getUnitateMasura());
    }

按数量比较:

public class QuantityProdusComparator implements Comparator<Produs> {
    @Override
    public int compare(Produs p1, Produs p2) {
      return p1.getCantitate().compareTo(p2.getCantitate());
    }

例如,如果你有一个 Produs 对象的数组列表,你可以像这样比较它们:

ArrayList<Produs> products = new ArrayList<>();
Produs p1 = new Produs("x", "centimeters", 5);
Produs p2 = new Produs("y", "meters", 4);
products.add(p1,p2);
//now you have two objects created so if you want to sort them by there quantity u can do it like this:
Collections.sort(productos, new QuantityProdusComparator());

它将根据您使用的比较器对列表进行排序。 如果对象相等,比较器类将在内部发送 0,如果对象小于则发送 -1,如果对象大于则发送 1。

如果您比较字符串属性,它将按字母顺序进行。

【讨论】:

  • 如果按字母顺序将这些单位作为字符串进行比较,则按度量单位进行“比较”是毫无意义的:"centimeter" &lt; "inch" &lt; "kilometer" &lt; "meter" &lt; "millimeter" &lt; "nanometer" :)
  • 我知道,这就是我这么说的原因。我认为它应该按数量排序,每个度量单位或类似的东西都有不同的数组。
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
相关资源
最近更新 更多