android/guava/src/com/google/common/collect/Ordering.java
public <E extends T> E min(@NullableDecl E a, @NullableDecl E b, @NullableDecl E c, E... rest) {
    E minSoFar = min(min(a, b), c);

    for (E r : rest) {
      minSoFar = min(minSoFar, r);
    }

    return minSoFar;
  }
public <E extends T> E min(@NullableDecl E a, @NullableDecl E b, @NullableDecl E c, E... rest) {
    E minSoFar = min(min(a, b), c);

    for (E r : rest) {
      minSoFar = min(minSoFar, r);
    }

    return minSoFar;
  }
public < E extends T > E min ( @ NullableDecl E a , @ NullableDecl E b , @ NullableDecl E c , E ... rest ) { E minSoFar = min ( min ( a , b ) , c ) ; for ( E r : rest ) { minSoFar = min ( minSoFar , r ) ; } return minSoFar ; }
Returns the least of the specified values according to this ordering. If there are multiple
least values, the first of those is returned.

<p><b>Java 8 users:</b> Use {@code Collections.min(Arrays.asList(a, b, c...), thisComparator)}
instead (but note that it does not guarantee which tied minimum element is returned).

@param a value to compare, returned if less than or equal to the rest.
@param b value to compare
@param c value to compare
@param rest values to compare
@throws ClassCastException if the parameters are not <i>mutually comparable</i> under this
ordering.
Returns the least of the specified values according to this ordering . If there are multiple least values the first of those is returned .