Как посчитать моду?

У меня есть некий массив, нужно посчитать моду в данном массиве (вывести какое число повторяется несколько раз в массиве). Вот мой пример кода, но не понимаю, то ли я делаю.

HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
Object sorted = listValue.stream().sorted().collect(Collectors.toList());
int list = Integer.parseInt(String.valueOf(listValue));
int max  = 1;
int temp = 0;

for(int i = 0; i < listValue.size(); i++) {

    if (hm.get(listValue) != null) {

        int count = hm.get(listValue);
        count++;
        hm.put(list, count);

        if(count > max) {
           max  = count;
           temp = list;
                                          }
                                        }

          else
          hm.put(list,1);
                                    }
    return temp;
                                }

Ответы (1 шт):

Автор решения: gil9red

Можно отсортировать и перебрать элементы парами:

List<Object> listValue = Arrays.asList(1, 4, 8, 7, 9, 4, 5);
List<Object> sorted = listValue.stream().sorted().collect(Collectors.toList());

for (int i = 1; i < sorted.size(); i++) {
    Object prevValue = sorted.get(i - 1);
    if (prevValue == sorted.get(i)) {
        System.out.println(prevValue);
    }
}

Можно посчитать элементы в словаре, так чтобы ключ=элемент, значение=количество, после вывести те, которых значение больше 1:

List<Object> listValue = Arrays.asList(1, 4, 8, 7, 9, 4, 5);
Map<Object, Integer> valueByCounter = new HashMap<>();

for (Object value : listValue) {
    Integer counter = valueByCounter.getOrDefault(value, 0);
    counter++;
    valueByCounter.put(value, counter);
}

for (Map.Entry<Object, Integer> entry : valueByCounter.entrySet()) {
    if (entry.getValue() > 1) {
        System.out.println(entry.getKey());
    }
}

Еще вариант нахождения дубликатов через сбор значений в списке, тут нужно проверить что если значение если в списке, значит дубликат, иначе добавить его в список:

List<Object> listValue = Arrays.asList(1, 4, 8, 7, 9, 4, 5);
List<Object> uniques = new LinkedList<>();

for (Object value : listValue) {
    if (uniques.contains(value)) {
        System.out.println(value);
    } else {
        uniques.add(value);
    }
}
→ Ссылка