我在这里使用Guava来比较2个地图,但我需要从右侧获取所有新密钥,并从左侧获取旧密钥。
问题是我需要将它们添加到entriesDiffering()方法返回的对象类型Map<String, ValueDifference<Object>>
。
任何人都知道如何做到这一点? entriesOnlyOnRight / Left给我一个Map对象,ValueDifference是一个接口。
欢迎任何帮助。 非常感谢。
答案 0 :(得分:1)
ValueDifference
仅适用于包含相同键和不同值的两个映射中的条目。这对entriesOnlyOnRight()
/ entriesOnlyOnLeft()
没有意义,因为你知道另一方面没有什么可比较的。
让我举个例子:
@Test
public void shouldUseMapsDifferenceCorrectly() {
//given
ImmutableMap<String, Integer> first = ImmutableMap.of(
"one", 01, // 1 in octal
"two", 02, // 2 in octal
"ten", 010 // 8 in octal
);
ImmutableMap<String, Integer> second = ImmutableMap.of(
"two", 2,
"three", 3,
"ten", 10
);
//when
final MapDifference<String, Integer> difference = Maps.difference(first, second);
//then
assertThat(difference.areEqual()).isFalse();
assertThat(difference.entriesDiffering())
.hasSize(1)
.hasEntrySatisfying("ten", valueDifference -> {
assertThat(valueDifference.leftValue()).isEqualTo(8);
assertThat(valueDifference.rightValue()).isEqualTo(10);
})
.hasToString("{ten=(8, 10)}");
assertThat(difference.entriesOnlyOnLeft())
.containsExactly(entry("one", 1));
assertThat(difference.entriesOnlyOnRight())
.containsExactly(entry("three", 3));
assertThat(difference.entriesInCommon())
.containsExactly(entry("two", 2));
}
(我使用AssertJ,但代码应该是不言自明的。)