Как найти медиану
List<Object> sorted = listValue.stream().sorted().collect(Collectors.toList());
int middle = listValue.size()/ 2;
int medianValue = 0;
if (listValue.size() % 2 == 1)
medianValue = (int) listValue.get(middle);
else
medianValue = (int)(listValue.get(middle - 1) + listValue.get(middle)) / 2;
Выдаёт ошибку в последней строке: `medianValue = (int)(listValue.get(middle - 1) + listValue.get(middle)) / 2;`, т.к. с Object нельзя использовать +, и при запуске программы компилятор выдаёт ошибку здесь `medianValue = (int) listValue.get(middle);`, такая ошибка: `java.lang.String cannot be cast to java.lang.Integer` Буду благодарна за помощь!
**UPD**
Отредактировала, привела к инту, но теперь рассчитывается неправильно
List<Object> listValue = getValueFromColumnByRow(2);
List<Object> sorted = listValue.stream().sorted(Comparator.comparingInt(x -> Integer.parseInt(Objects.toString(x)))) .collect(Collectors.toList());
int middle = listValue.size()/ 2;
int medianValue = 0;
int m = Integer.parseInt((String) listValue.get(middle - 1));
if (listValue.size() % 2 == 1)
medianValue = Integer.parseInt((String) listValue.get(middle));
else
medianValue = (m + medianValue) / 2;
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Во-первых, медиана имеет смысл для отсортированного списка.
Во-вторых, расчёт медианы во втором примере (после редактирования) некорректен, достаточно было преобразовать тип и обработать случай чётного количества элементов в списке:
int middle = sorted.size()/ 2;
int medianValue = Integer.parseInt(sorted.get(middle).toString());
if (listValue.size() % 2 == 0) {
medianValue = (medianValue + Integer.parseInt(sorted.get(middle - 1).toString())) / 2;
}