Как найти медиану

    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;
}
→ Ссылка