Я думаю примерно так:
public static <T extends Comparable<T>> T minOf(T...ts){
SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
return set.first();
}
public static <T extends Comparable<T>> T maxOf(T...ts){
SortedSet<T> set = new TreeSet<T>(Arrays.asList(ts));
return set.last();
}
Но не является нулевым безопасным, чего я тоже хочу.
Вы знаете, как лучше решить эту проблему?
РЕДАКТИРОВАТЬ:
После комментариев я также попробовал min ():
public static <T extends Comparable<T>> T minOf(T...ts){
return Collections.min(Arrays.asList(ts), new Comparator<T>(){
public int compare(T o1, T o2) {
if(o1!=null && o2!=null){
return o1.compareTo(o2);
}else if(o1!=null){
return 1;
}else{
return -1;
}
}});
}
Что вы думаете об этом?
O(n log n)
, аmax
+min
равноO(2n)
. Что было бы немного лучше, так это сделать один цикл и обновить в нем max и min. И OP, похоже, не требует и того, и другого в одной функции. 02.06.2015