根据另一个 ArrayList 在 ArrayList 中查找特定条目?

Find a specific entry in an ArrayList based upon another ArrayList?

我有一个产品class

public class Produs {

private String denumire;
private String categorie;
private String taraOrigine;
private double pret;
}

有不同的构造函数来满足我的需要。我有一个这种类型的 ArrayList,其中所有产品都具有所有字段(该列表是通过分析文件生成的)。还有一个列表,其中有产品只填写了名称和原产国(其余字段为空)。这个列表也是从另一个列表生成的。

我的问题是,如何使用位于第二个列表中的产品的已知字段搜索第一个列表,以便我可以完成第一个列表中的每个对象?

我试过

public Produs getProdus(Produs p)
{
    for(Produs prod:produse)
        {
            if ((prod.getDenumire().equals(p.getDenumire()) && (prod.getTaraOrigine().equals(p.getTaraOrigine()))));
            {
                return prod;
            }
 }
return null;
}

其中 produse 是我的产品列表,其中所有字段都有值,p 是仅使用 2 个字段构建的产品。

我也尝试过覆盖 equals 和 hashcode。问题是当它找到元素时,循环停止。

您的 getProdus() 函数是正确的。您需要为第一个列表中的每个对象循环调用它。

您需要在返回实际对象之前填充它。

public Produs getProdus(Produs p)
{
    for(Produs prod:produse)
    {
        if ((prod.getDenumire().equals(p.getDenumire()) && (prod.getTaraOrigine().equals(p.getTaraOrigine()))));
        {
            if (prod.getCategorie() == null) {
                prod.setCategorie(p.getCategorie());//assuming you have getter and setter already in Produs
            }
            return prod;//remove this statement, if you want multiple products to be updated and make this method as void type instead of returning Produs type. Remove return null as well from end of this method.
        }
    }
    return null;
}

如果您想列出符合条件的所有产品,那么您可以创建一个列表并填充该列表,如下所示:

public void getProdus(Produs p)
{
    List<Produs> productList = new ArrayList<Produs>();
    for(Produs prod:produse)
    {
        if ((prod.getDenumire().equals(p.getDenumire()) && (prod.getTaraOrigine().equals(p.getTaraOrigine()))));
        {
            productList.add(prod);
        }
    }
    for(Produs prod:productList) {//iterate over the list who matched the criteria and amend it with properties from p.
    }
}