【发布时间】:2018-02-21 23:42:27
【问题描述】:
我有两个要合并的 TreeMap:
TreeMap<foo, bar> map1 = {key1=value1, key2=value2};
TreeMap<foo, bar> map2 = {key1=value6, key3=value3, key4=value4, key5=value5};
我想将这些地图合并成一个,但我想跳过第二张地图的第一个条目,所以我会有这样的东西:
TreeMap<foo, bar> result = {key1=value1, key2=value2, key3=value3, key4=value4, key5=value5};
但是,我不能打电话给map2.remove(map2.firstKey()) 甚至map2.remove(key1),因为equals 在foo 上不能正常工作。
有什么好办法吗?
(目前我正在这样做,效果很好,但我对它不太满意,我认为这不是最好的方法:
TreeMap<foo, bar> result = new TreeMap<>();
result.putAll(map1);
for (Map.Entry<foo, bar> entry : Iterables.skip(map2.entrySet(), 1) ) {
result.put(entry.getKey(), entry.getValue());
}
)
【问题讨论】:
-
您的第二张地图有 2 个名为
key3的键。是错字吗? -
because equals does not work fine on foo你应该先修复你的 equals 方法。否则,TreeMap 的所有使用都是徒劳的,因为它可能会或可能不会达到您的预期。 -
@Mritunjay 谢谢,已修复
-
@Absurd-Mind 谢谢,但它是我无权访问的大项目的一部分,需要时间来修复。此外,我所依赖的 TreeMap 的唯一部分是两个地图具有相同的“第一个元素”,TreeMap 不会更改顺序,因此它是可靠的。
-
TreeMap不使用equals。
标签: java dictionary merge treemap