Class ComparisonChain
public int compareTo(Foo that) {
return ComparisonChain.start()
.compare(this.aString, that.aString)
.compare(this.anInt, that.anInt)
.compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
.result();
}
The value of this expression will have the same sign as the first nonzero comparison result in the chain, or will be zero if every comparison result was zero.
Note: ComparisonChain
instances are immutable. For this utility to work
correctly, calls must be chained as illustrated above.
Performance note: Even though the ComparisonChain
caller always invokes its
compare
methods unconditionally, the ComparisonChain
implementation stops calling its
inputs' compareTo
and compare
methods as
soon as one of them returns a nonzero result. This optimization is typically important only in
the presence of expensive compareTo
and compare
implementations.
See the Guava User Guide article on
ComparisonChain
.
- Since:
- 2.0
- Author:
- Mark Davis, Kevin Bourrillion
-
Method Summary
Modifier and TypeMethodDescriptionabstract ComparisonChain
compare
(double left, double right) Compares twodouble
values as specified byDouble.compare(double, double)
, if the result of this comparison chain has not already been determined.abstract ComparisonChain
compare
(float left, float right) Compares twofloat
values as specified byFloat.compare(float, float)
, if the result of this comparison chain has not already been determined.abstract ComparisonChain
compare
(int left, int right) Compares twoint
values as specified byInteger.compare(int, int)
, if the result of this comparison chain has not already been determined.abstract ComparisonChain
compare
(long left, long right) Compares twolong
values as specified byLong.compare(long, long)
, if the result of this comparison chain has not already been determined.final ComparisonChain
Deprecated.abstract ComparisonChain
compare
(Comparable<?> left, Comparable<?> right) Compares two comparable objects as specified byComparable.compareTo(T)
, if the result of this comparison chain has not already been determined.abstract <T extends @Nullable Object>
ComparisonChaincompare
(T left, T right, Comparator<T> comparator) Compares two objects using a comparator, if the result of this comparison chain has not already been determined.abstract ComparisonChain
compareFalseFirst
(boolean left, boolean right) Compares twoboolean
values, consideringfalse
to be less thantrue
, if the result of this comparison chain has not already been determined.abstract ComparisonChain
compareTrueFirst
(boolean left, boolean right) Compares twoboolean
values, consideringtrue
to be less thanfalse
, if the result of this comparison chain has not already been determined.abstract int
result()
Ends this comparison chain and returns its result: a value having the same sign as the first nonzero comparison result in the chain, or zero if every result was zero.static ComparisonChain
start()
Begins a new chained comparison statement.
-
Method Details
-
start
Begins a new chained comparison statement. See example in the class documentation. -
compare
Compares two comparable objects as specified byComparable.compareTo(T)
, if the result of this comparison chain has not already been determined.This method is declared to accept any 2
Comparable
objects, even if they are not mutually comparable. If you pass objects that are not mutually comparable, this method may throw an exception. (The reason for this decision is lost to time, but the reason might be that we wanted to support legacy classes that implement the raw typeComparable
(instead of implementingComparable<Foo>
) without producing warnings. If so, we would prefer today to produce warnings in that case, and we may change this method to do so in the future. Support for rawComparable
types in Guava in general is tracked as #989.)- Throws:
ClassCastException
- if the parameters are not mutually comparable
-
compare
public abstract <T extends @Nullable Object> ComparisonChain compare(T left, T right, Comparator<T> comparator) Compares two objects using a comparator, if the result of this comparison chain has not already been determined. -
compare
Compares twoint
values as specified byInteger.compare(int, int)
, if the result of this comparison chain has not already been determined. -
compare
Compares twolong
values as specified byLong.compare(long, long)
, if the result of this comparison chain has not already been determined. -
compare
Compares twofloat
values as specified byFloat.compare(float, float)
, if the result of this comparison chain has not already been determined. -
compare
Compares twodouble
values as specified byDouble.compare(double, double)
, if the result of this comparison chain has not already been determined. -
compare
@InlineMe(replacement="this.compareFalseFirst(left, right)") @Deprecated public final ComparisonChain compare(Boolean left, Boolean right) Deprecated.UsecompareFalseFirst(boolean, boolean)
; or, if the parameters passed are being either negated or reversed, undo the negation or reversal and usecompareTrueFirst(boolean, boolean)
.Discouraged synonym forcompareFalseFirst(boolean, boolean)
.- Since:
- 19.0
-
compareTrueFirst
Compares twoboolean
values, consideringtrue
to be less thanfalse
, if the result of this comparison chain has not already been determined.- Since:
- 12.0
-
compareFalseFirst
Compares twoboolean
values, consideringfalse
to be less thantrue
, if the result of this comparison chain has not already been determined.- Since:
- 12.0 (present as
compare
since 2.0)
-
result
Ends this comparison chain and returns its result: a value having the same sign as the first nonzero comparison result in the chain, or zero if every result was zero.
-
compareFalseFirst(boolean, boolean)
; or, if the parameters passed are being either negated or reversed, undo the negation or reversal and usecompareTrueFirst(boolean, boolean)
.