我有两个相同对象的集合,Collection< Foo> oldSet和Collection< Foo> newSet。所需的逻辑如下:
>如果foo在(*)oldSet而不是newSet,调用doRemove(foo)
> else if foo不在oldSet中,而是在newSet中,调用doAdd(foo)
> else如果foo在集合中但是被修改,调用doUpdate(oldFoo,newFoo)
> else if!foo.activated&&& foo.startDate> = now,call doStart(foo)
> else if foo.activated&& foo.endDate< = now,call doEnd(foo)
(*)“in”表示唯一标识符匹配,不一定是内容。
当前(遗留)代码做许多比较来找出removeSet,addSet,updateSet,startSet和endSet,然后循环来对每个项目进行操作。
代码是相当混乱(部分是因为我已经省略了一些意大利面条逻辑),我试图重构它。一些更多的背景信息:
>据我所知,oldSet和newSet实际上是由ArrayList支持
>每个集合包含少于100个项目,最有可能最多在20
>该代码被频繁调用(以百万/天为单位),尽管这些集合很少不同
我的问题:
>如果我将oldSet和newSet转换为HashMap< Foo> (这里不关心顺序),使用ID作为键,它会使代码更容易阅读和更容易比较?多少时间&内存性能是损失的转换?
>会迭代两个集合并执行适当的操作更高效和简洁吗?