Java 对象列表中的重复元素

Java 对象列表中的重复元素,java,android,ormlite,Java,Android,Ormlite,我的代码中有一个查询,它在一个对象中搜索多个ID。在表preparationphyterapic中包含以下字段:phyterapicitem\u id(外键)、preparationItem\u id(外键)和id。问题是当preparationItem\u id包含多个条目时,它会再次添加到列表中 我尝试使用if(!listPreparations.contains(preparationContents2.get(0))但不起作用 有什么想法吗 preparationphyt

我的代码中有一个查询,它在一个对象中搜索多个ID。在表
preparationphyterapic
中包含以下字段:
phyterapicitem\u id
(外键)、
preparationItem\u id
(外键)和
id
。问题是当
preparationItem\u 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));
                }
            }
preparationphyterapicdao=getHelper().getpreparationphyterapicdao();
QueryBuilder queryBuilder2=
preparationphyterapicdao.queryBuilder();
其中where2=queryBuilder2.Where();
SelectArg SelectArg=new SelectArg();
式中2.eq(“植物学家项目识别码”,选择arg);
PreparedQuery preparedQuery2=queryBuilder2.prepare();
植物类目表的编制;
QueryBuilder queryBuilder3=
preparationContentDao.queryBuilder();
其中,where3=queryBuilder3.Where();
SelectArg selectArg2=new SelectArg();
式中3.等式(“id”,选择arg2);
PreparedQuery preparedQuery3=queryBuilder3.prepare();
列出准备内容2;
对于(int j=0;j
如果您查看
列表。包含(…)
方法定义,它会显示:

如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素e,并且(o==null?e==null:o.equals(e))时,才返回true

我怀疑您没有在
PreparationContent
中定义的完全使用
id
字段的
equals(…)
方法。我假设这就是您想要的。您需要在对象中包含以下内容。您还需要重写
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;
  }

“问题是当一个preparationItem\u id包含多个条目时”是什么意思一个id字段怎么可能有多个条目?例如,一行:phytterapicItem_id-1,preparationItem_id-1,id-1;另一行:phytterapicItem_id-2,preparationItem_id-1,id-2;立即理解?Thx用于编辑和回答!但是,我的类
PreparationContent
没有明确的字段id!我应该放在哪里
返回this.id=other.id;
?您需要在
equals
方法中输入任何您应该能够识别重复的
PreparationContent
对象的内容,我猜。工作了!!太多了!在equals中是这样的:
返回this.preparationItem.getId()==other.preparationItem.getId();
和在
hashCode()中
this:
返回此.preparationItem.getId();
:)