package com.softwaremill.common.util.tuples;
import com.google.common.collect.Ordering;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class LexicographicPair<A extends Comparable, B extends Comparable>
extends Pair<A, B>
implements Comparable<LexicographicPair<A, B>> {
private final static Ordering ordering = Ordering.natural().nullsFirst();
private LexicographicPair(A left, B right) {
super(left, right);
}
@SuppressWarnings({"unchecked"})
@Override
public int compareTo(LexicographicPair<A, B> other) {
int result = ordering.compare(getLeft(), other.getLeft());
if (result == 0) {
return ordering.compare(getRight(), other.getRight());
} else {
return result;
}
}
public static <A extends Comparable<A>, B extends Comparable<B>> LexicographicPair<A, B> pair(A left, B right) {
return new LexicographicPair<A, B>(left, right);
}
}