如何确认两个ImmutableMaps在其中具有完全相同(键,值)对?

Sha*_*han 0 java guava

我需要为单元测试做这个.正在测试的方法返回一个ImmutbaleMap,我需要能够将它与我已经拥有的那个进行比较.一种方法是为两个(keySets())获取密钥集,运行它们并比较这两个映射返回的值.然而,对我来说这似乎有点低效.有没有更好/首选的方法来做到这一点?

NPE*_*NPE 6

如果键和值都equals()正确实现,您可以简单地使用Map.equals():

将指定对象与此映射进行相等性比较.返回true如果给定对象也是一个映射并且两个映射表示相同的映射.更正式地说,两个映射m1m2表示相同的映射m1.entrySet().equals(m2.entrySet()).这可确保该equals方法在Map接口的不同实现中正常工作.

如果他们不这样做,我怀疑你会发现一个开箱即用的单线程.我希望你必须自己实施比较.做起来并不难:

  • 如果两个键集之间的对称差异不为空,那么就完成了.
  • 否则,迭代一个地图,在另一个地图中查找相同的密钥并比较这些值(使用适当的比较方法).

这可以很容易地封装到辅助函数中,可能由值比较器参数化.