@FunctionalInterface  
public interface Comparator<T> { 
  // ...
}

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

negative: adjective less than zero

In the foregoing description, the notation sgn(expression) designates the mathematical signum function, which is defined to return one of -1, 0, or 1 according to whether the value of expression is negative, zero or positive.

The implementor must ensure that sgn(compare(x, y)) == -sgn(compare(y, x)) for all x and y. (This implies that compare(x, y) must throw an exception if and only if compare(y, x) throws an exception.)

The implementor must also ensure that the relation is transitive: ((compare(x, y)>0) && (compare(y, z)>0)) implies compare(x, z)>0.

Finally, the implementor must ensure that compare(x, y)==0 implies that sgn(compare(x, z))==sgn(compare(y, z)) for all z.

It is generally the case, but not strictly required that (compare(x, y)==0) == (x. equals(y)). Generally speaking, any comparator that violates this condition should clearly indicate this fact. The recommended language is “Note: this comparator imposes orderings that are inconsistent with equals.”

Params:
o1 – the first object to be compared.
o2 – the second object to be compared.

Returns:
a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

Throws:
NullPointerException – if an argument is null and this comparator does not permit null arguments
ClassCastException – if the arguments’ types prevent them from being compared by this comparator.

int compare(T o1, T o2);