我以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 )
答案 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);
}