aboutsummaryrefslogtreecommitdiffstats
path: root/guava/src/com/google/common/collect/CompoundOrdering.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava/src/com/google/common/collect/CompoundOrdering.java')
-rw-r--r--guava/src/com/google/common/collect/CompoundOrdering.java13
1 files changed, 9 insertions, 4 deletions
diff --git a/guava/src/com/google/common/collect/CompoundOrdering.java b/guava/src/com/google/common/collect/CompoundOrdering.java
index 26ebf54..f669a62 100644
--- a/guava/src/com/google/common/collect/CompoundOrdering.java
+++ b/guava/src/com/google/common/collect/CompoundOrdering.java
@@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible;
import java.io.Serializable;
import java.util.Comparator;
+import java.util.List;
/** An ordering that tries several comparators in order. */
@GwtCompatible(serializable = true)
@@ -36,11 +37,15 @@ final class CompoundOrdering<T> extends Ordering<T> implements Serializable {
this.comparators = ImmutableList.copyOf(comparators);
}
+ CompoundOrdering(List<? extends Comparator<? super T>> comparators,
+ Comparator<? super T> lastComparator) {
+ this.comparators = new ImmutableList.Builder<Comparator<? super T>>()
+ .addAll(comparators).add(lastComparator).build();
+ }
+
@Override public int compare(T left, T right) {
- // Avoid using the Iterator to avoid generating garbage (issue 979).
- int size = comparators.size();
- for (int i = 0; i < size; i++) {
- int result = comparators.get(i).compare(left, right);
+ for (Comparator<? super T> comparator : comparators) {
+ int result = comparator.compare(left, right);
if (result != 0) {
return result;
}