我有一个产品类
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。问题是当它找到元素时,循环停止。
答案 0 :(得分:1)
您需要在返回实际对象之前填充它。
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.
}
}
答案 1 :(得分:0)
你的getProdus()函数是正确的。您需要在循环中为第一个列表中的每个对象调用它。