我的代码中有一个查询,它在一个对象中搜索多个ID。表PreparationPhytoterapic
中包含以下字段:phytoterapicItem_id
(外键),preparationItem_id
(外键)和id
。问题是当preparationItem_id
包含多个条目时,它会再次添加到列表中。
我尝试使用if(!listPreparations.contains(preparationContents2.get(0)))
但不起作用。
有什么想法吗?
preparationphytoterapicDao = getHelper().getPreparationPhytoterapicDao();
QueryBuilder<PreparationPhytoterapic, Integer> queryBuilder2 =
preparationphytoterapicDao.queryBuilder();
Where<PreparationPhytoterapic, Integer> where2 = queryBuilder2.where();
SelectArg selectArg = new SelectArg();
where2.eq("phytoterapicItem_id", selectArg);
PreparedQuery<PreparationPhytoterapic> preparedQuery2 = queryBuilder2.prepare();
List<PreparationPhytoterapic> preparationphytoterapics;
QueryBuilder<PreparationContent, Integer> queryBuilder3 =
preparationContentDao.queryBuilder();
Where<PreparationContent, Integer> where3 = queryBuilder3.where();
SelectArg selectArg2 = new SelectArg();
where3.eq("id", selectArg2);
PreparedQuery<PreparationContent> preparedQuery3 = queryBuilder3.prepare();
List<PreparationContent> preparationContents2;
for(int j = 0; j < listPhytoterapics.size(); j++) {
selectArg.setValue(listPhytoterapics.get(j).getPhytoterapicItem().getId());
preparationphytoterapics = preparationphytoterapicDao.query(preparedQuery2);
if(preparationphytoterapics.size() != 0) {
for(int k = 0; k < preparationphytoterapics.size(); k++) {
selectArg2.setValue(preparationphytoterapics.get(k).getPreparationItem().getId());
preparationContents2 = preparationContentDao.query(preparedQuery3);
if(!listPreparations.contains(preparationContents2.get(0)))
listPreparations.add(preparationContents2.get(0));
}
}
答案 0 :(得分:1)
如果你看一下它所说的List.contains(...)
方法定义:
如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素e时才返回true(o == null?e == null:o.equals(e))。
我怀疑你不在equals(...)
中定义的PreparationContent
方法完全使用id
字段。我认为这就是你想要的。您需要在对象中包含以下内容。您还需要覆盖hashCode()
以使它们对称。
@Override
public boolean equals(Object obj) {
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
PreparationContent other = (PreparationContent)obj;
return this.id = other.id;
}
@Override
public int hashCode() {
// if id is long then return Long.valueOf(id).hashCode();
return id;
}