小编ckp*_*ong的帖子

如何最好地比较Java中的两个集合并采取行动?

我有两个相同对象的集合,Collection<Foo> oldSetCollection<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,startSetendSet,然后循环,在每个项目采取行动.

代码非常混乱(部分是因为我已经遗漏了一些意大利面条逻辑)而我正在尝试重构它.更多背景信息:

  • 据我所知,oldSetnewSet实际上是由支持ArrayList
  • 每套包含少于100件物品,最多可能是20件
  • 这个代码经常被调用(以百万/天为单位),尽管这些代码很少有所不同

我的问题:

  • 如果我转换oldSetnewSetHashMap<Foo>(顺序并不关心这里的),用ID作为键,这将使得代码更易于阅读和更容易比较?转换损失了多少时间和内存性能?
  • 迭代这两组并执行适当的操作会更有效和简洁吗?

java collections

40
推荐指数
4
解决办法
10万
查看次数

从表示树结构的Oracle表中选择所有后代行

我在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?

sql oracle recursive-query oracle10g hierarchical-data

3
推荐指数
1
解决办法
5189
查看次数