Class Equivalence<T>
For users targeting Android API level 24 or higher: This class will eventually
 implement BiPredicate<T, T> (as it does in the main Guava artifact), but we currently
 target a lower API level. In the meantime, if you have support for method references you can use
 an equivalence as a bi-predicate like this: myEquivalence::equivalent.
- Since:
- 10.0 (mostly source-compatible since 4.0)
- Author:
- Bob Lee, Ben Yu, Gregory Kick
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic final classEquivalence.Wrapper<T extends @Nullable Object>Wraps an object so thatEquivalence.Wrapper.equals(Object)andEquivalence.Wrapper.hashCode()delegate to anEquivalence.
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected abstract booleandoEquivalent(T a, T b) protected abstract intImplemented by the user to return a hash code fort, subject to the requirements specified inhash(T).static Equivalence<Object> equals()Returns an equivalence that delegates toObject.equals(java.lang.Object)andObject.hashCode().booleanMay returntrueifobjectis aEquivalencethat behaves identically to this equivalence.final booleanequivalent(@Nullable T a, @Nullable T b) Returnstrueif the given objects are considered equivalent.equivalentTo(@Nullable T target) Returns a predicate that evaluates to true if and only if the input is equivalent totargetaccording to this equivalence relation.final intReturns a hash code fort.static Equivalence<Object> identity()Returns an equivalence that uses==to compare values andSystem.identityHashCode(Object)to compute the hash code.final <F> Equivalence<F> onResultOf(Function<? super F, ? extends @Nullable T> function) Returns a new equivalence relation forFwhich evaluates equivalence by first applyingfunctionto the argument, then evaluating usingthis.final <S extends @Nullable T>
 Equivalence<Iterable<S>> pairwise()Returns an equivalence over iterables based on the equivalence of their elements.final <S extends @Nullable T>
 Equivalence.Wrapper<S> wrap(S reference) Returns a wrapper ofreferencethat implementsObject.equals()such thatwrap(a).equals(wrap(b))if and only ifequivalent(a, b).
- 
Constructor Details- 
Equivalenceprotected Equivalence()Constructor for use by subclasses.
 
- 
- 
Method Details- 
equivalentReturnstrueif the given objects are considered equivalent.This method describes an equivalence relation on object references, meaning that for all references x,y, andz(any of which may be null):- equivalent(x, x)is true (reflexive property)
- equivalent(x, y)and- equivalent(y, x)each return the same result (symmetric property)
- If equivalent(x, y)andequivalent(y, z)are both true, thenequivalent(x, z)is also true (transitive property)
 Note that all calls to equivalent(x, y)are expected to return the same result as long as neitherxnoryis modified.
- 
doEquivalent- Since:
- 10.0 (previously, subclasses would override equivalent())
 
- 
equalsMay returntrueifobjectis aEquivalencethat behaves identically to this equivalence.Warning: do not depend on the behavior of this method. Historically, Equivalenceinstances in this library have implemented this method to recognize certain cases where distinctEquivalenceinstances would in fact behave identically. However, as code migrates tojava.util.function, that behavior will disappear. It is best not to depend on it.
- 
hashReturns a hash code fort.The hashhas the following properties:- It is consistent: for any reference x, multiple invocations ofhash(x} consistently return the same value providedxremains unchanged according to the definition of the equivalence. The hash need not remain consistent from one execution of an application to another execution of the same application.
- It is distributable across equivalence: for any references xandy, ifequivalent(x, y), thenhash(x) == hash(y). It is not necessary that the hash be distributable across inequivalence. Ifequivalence(x, y)is false,hash(x) == hash(y)may still be true.
- hash(null)is- 0.
 
- It is consistent: for any reference 
- 
doHash
- 
onResultOfReturns a new equivalence relation forFwhich evaluates equivalence by first applyingfunctionto the argument, then evaluating usingthis. That is, for any pair of non-null objectsxandy,equivalence.onResultOf(function).equivalent(a, b)is true if and only ifequivalence.equivalent(function.apply(a), function.apply(b))is true.For example: Equivalence<Person> SAME_AGE = Equivalence.equals().onResultOf(GET_PERSON_AGE);functionwill never be invoked with a null value.Note that functionmust be consistent according tothisequivalence relation. That is, invokingFunction.apply(F)multiple times for a given value must return equivalent results. For example,Equivalence.identity().onResultOf(Functions.toStringFunction())is broken because it's not guaranteed thatObject.toString()) always returns the same string instance.- Since:
- 10.0
 
- 
wrapReturns a wrapper ofreferencethat implementsObject.equals()such thatwrap(a).equals(wrap(b))if and only ifequivalent(a, b).The returned object is serializable if both this Equivalenceandreferenceare serializable (including whenreferenceis null).- Since:
- 10.0
 
- 
pairwiseReturns an equivalence over iterables based on the equivalence of their elements. More specifically, two iterables are considered equivalent if they both contain the same number of elements, and each pair of corresponding elements is equivalent according tothis. Null iterables are equivalent to one another.Note that this method performs a similar function for equivalences as Ordering.lexicographical()does for orderings.The returned object is serializable if this object is serializable. - Since:
- 10.0
 
- 
equivalentTo
- 
equalsReturns an equivalence that delegates toObject.equals(java.lang.Object)andObject.hashCode().equivalent(T, T)returnstrueif both values are null, or if neither value is null andObject.equals(java.lang.Object)returnstrue.hash(T)returns0if passed a null value.- Since:
- 13.0, 8.0 (in Equivalences with null-friendly behavior), 4.0 (in Equivalences)
 
- 
identityReturns an equivalence that uses==to compare values andSystem.identityHashCode(Object)to compute the hash code.equivalent(T, T)returnstrueifa == b, including in the case that a and b are both null.- Since:
- 13.0, 4.0 (in Equivalences)
 
 
-