我有两个相同对象的集合,Collection<Foo> oldSet和Collection<Foo> newSet.所需的逻辑如下:
foo是(*)oldSet但不是newSet,请致电doRemove(foo)foo不在,oldSet但在newSet,呼叫doAdd(foo)foo在两个集合中但已修改,请调用doUpdate(oldFoo, newFoo)!foo.activated && foo.startDate >= now,打电话doStart(foo)foo.activated && foo.endDate <= now,打电话doEnd(foo)(*)"in"表示唯一标识符匹配,不一定是内容.
目前的(传统)的代码做了很多比较,以计算出removeSet,addSet,updateSet,startSet和endSet,然后循环,在每个项目采取行动.
代码非常混乱(部分是因为我已经遗漏了一些意大利面条逻辑)而我正在尝试重构它.更多背景信息:
oldSet而newSet实际上是由支持ArrayList我的问题:
oldSet和newSet成HashMap<Foo>(顺序并不关心这里的),用ID作为键,这将使得代码更易于阅读和更容易比较?转换损失了多少时间和内存性能?我在Oracle 10g中有一个表MYTYPE表示树结构,如下所示:
ID | PARENTID | DETAIL
Run Code Online (Sandbox Code Playgroud)
我想选择MYTYPE中作为特定ID的后代的所有行,以便我可以在其他地方创建查询,例如:
SELECT *
FROM MYDETAIL
WHERE MYTYPEID IN [all MYTYPE which are descendants of some ID];
Run Code Online (Sandbox Code Playgroud)
构建后代集的成本效率最高的方法是什么,最好不使用PL/SQL?