更新我的HashSet中的一些元素

时间:2013-12-16 14:59:27

标签: java hibernate

我以Hibernate的方式从数据库中检索到Set MyObject

Set<MyObject> dbObjects = dbService.getMyObjects();

然后,我从客户端获得了另一个Map MyObject

Map<String, MyObject> newObjects = getNewObjectsFromClient();

MyObject有一个名为name的属性。

我希望替换 dbObjects中的元素(Set)与newObjects(它是Map)相同name。我最终得到了以下代码,但是我被卡住了......

Collection<MyObject> newCollection = newObjects.values();
for(MyObject newObj : newCollection){
      String newObjName = newObj.getName();
     for(MyObject dbObj : dbObjects){
        if(dbObj.getName.equals(newObjName)){
            //Here, I intend to replace the dbObj with newObj in dbObjects Set  
              //but I feel it is not efficient with this nested for loop 
             //& I am currently iterating the dbObjects, I can't replace element now        
        }
    }
}

我觉得上面的代码效率低下。是否有更好的解决方案来更新Set<MyObject>

(请不要建议我创建一个新的Set来保存更新的元素(出于休眠的原因),我只想更新现有的dbObjects Set

1 个答案:

答案 0 :(得分:1)

抱歉,我不知道hibernate。所以,我的回答可能不正确。

Collection<MyObject> replaceObjects = new ArrayList<MyObject>();
for(MyObject newObj : newCollection){
     String newObjName = newObj.getName();
     Iterator itr = dbObjects.iterator();
     while(itr.hasNext()) {
        MyObject dbObj = itr.next();
        if(dbObj.getName.equals(newObjName)){
            replaceObjects.add(dbObj);
            itr.remove();
        }
    }
    dbObjects.addAll(repalceObjects);
}