1 /* 2 * Copyright (C) 2007 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.common.collect; 18 19 import com.google.common.annotations.GwtCompatible; 20 21 import java.util.Map; 22 23 import javax.annotation.Nullable; 24 25 /** 26 * An object representing the differences between two maps. 27 * 28 * @author Kevin Bourrillion 29 * @since 2.0 (imported from Google Collections Library) 30 */ 31 @GwtCompatible 32 public interface MapDifference<K, V> { 33 /** 34 * Returns {@code true} if there are no differences between the two maps; 35 * that is, if the maps are equal. 36 */ areEqual()37 boolean areEqual(); 38 39 /** 40 * Returns an unmodifiable map containing the entries from the left map whose 41 * keys are not present in the right map. 42 */ entriesOnlyOnLeft()43 Map<K, V> entriesOnlyOnLeft(); 44 45 /** 46 * Returns an unmodifiable map containing the entries from the right map whose 47 * keys are not present in the left map. 48 */ entriesOnlyOnRight()49 Map<K, V> entriesOnlyOnRight(); 50 51 /** 52 * Returns an unmodifiable map containing the entries that appear in both 53 * maps; that is, the intersection of the two maps. 54 */ entriesInCommon()55 Map<K, V> entriesInCommon(); 56 57 /** 58 * Returns an unmodifiable map describing keys that appear in both maps, but 59 * with different values. 60 */ entriesDiffering()61 Map<K, ValueDifference<V>> entriesDiffering(); 62 63 /** 64 * Compares the specified object with this instance for equality. Returns 65 * {@code true} if the given object is also a {@code MapDifference} and the 66 * values returned by the {@link #entriesOnlyOnLeft()}, {@link 67 * #entriesOnlyOnRight()}, {@link #entriesInCommon()} and {@link 68 * #entriesDiffering()} of the two instances are equal. 69 */ 70 @Override equals(@ullable Object object)71 boolean equals(@Nullable Object object); 72 73 /** 74 * Returns the hash code for this instance. This is defined as the hash code 75 * of <pre> {@code 76 * 77 * Arrays.asList(entriesOnlyOnLeft(), entriesOnlyOnRight(), 78 * entriesInCommon(), entriesDiffering())}</pre> 79 */ 80 @Override hashCode()81 int hashCode(); 82 83 /** 84 * A difference between the mappings from two maps with the same key. The 85 * {@link #leftValue} and {@link #rightValue} are not equal, and one but not 86 * both of them may be null. 87 * 88 * @since 2.0 (imported from Google Collections Library) 89 */ 90 interface ValueDifference<V> { 91 /** 92 * Returns the value from the left map (possibly null). 93 */ leftValue()94 V leftValue(); 95 96 /** 97 * Returns the value from the right map (possibly null). 98 */ rightValue()99 V rightValue(); 100 101 /** 102 * Two instances are considered equal if their {@link #leftValue()} 103 * values are equal and their {@link #rightValue()} values are also equal. 104 */ equals(@ullable Object other)105 @Override boolean equals(@Nullable Object other); 106 107 /** 108 * The hash code equals the value 109 * {@code Arrays.asList(leftValue(), rightValue()).hashCode()}. 110 */ hashCode()111 @Override int hashCode(); 112 } 113 114 } 115