Мне нужен был метод, чтобы получить медиану из трех значений, я подумал, что это хорошая возможность написать общий метод, поскольку на самом деле я не занимаюсь этим. Я написал это, и это выглядит довольно прямолинейно, хотя я получаю предупреждение, но, похоже, он работает нормально, согласно моим тестам.
Я знаю, что я мог бы использовать отсортированный по умолчанию набор или Collections.sort()
, но этот подход для понимания.
Я хочу выделить несколько вещей:
- Я заметил, что это не работает, если я пытался объявить
medianHelper
сArrays.asList(a, b, c)
, почему это? Попытка поиска это дает мне несвязанные результаты, и это в противном случае неуловимо, так как я не уверен, что происходит. Я получаюUnsupportedOperationException
, но этого нет, как показано ниже. - Почему я получаю предупреждение? Что не так/не хватает?
Метод следует:
private static <T extends Comparable> T median(T a, T b, T c) {
List<T> medianHelper = new ArrayList<>();
T max;
T min;
medianHelper.add(a);
medianHelper.add(b);
medianHelper.add(c);
if (a.compareTo(b) >= 0) {
max = a;
min = b;
} else {
max = b;
min = a;
}
if (max.compareTo(c) == -1) {
max = c;
}
if (min.compareTo(c) >= 0) {
min = c;
}
medianHelper.remove(max);
medianHelper.remove(min);
return medianHelper.get(0);
}