Не автоматическое решение, но я нахожу WTF's в минуту полезным.
(источник: osnews.com )
Когда вы возвращаете int, диапазон, когда средний-o.average находится между -1 и 1, всегда будет возвращать 0.
Одно из решений - просто изменить вашу функцию compareTo на:
return Float.compare(average, o.average);
Вы сортируете числа с плавающей запятой, используя целые числа. Целые числа не округляются; они усекаются. Кроме того, учитывая способ, которым вы на самом деле выполняете сортировку, рассмотрите возможность использования вместо этого TreeHashMap.
(и просто для придирки, соглашение Java использует строчные буквы для имен методов и переменных)