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を使用しますが、コードは自明でなければなりません。)
左から右サイドから*新しいキーと、古いキーで*、あなたは本当に一つのマップにあるが他のマップにはないキーを意味しますか? –
right..objectsはentriesOnlyOnRightおよびentriesOnlyOnLeftメソッドから返されます。 ;) –
これらのメソッドの問題点は何ですか? –