Не получается посчитать количество повторяющихся значений в массиве

public static void main(String[] args) throws IOException {
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        List<Integer> list = new ArrayList<>();
        System.out.println("Введите последовательность из 10 чисел");
        for (int i = 0; i<10; i++){
            list.add(Integer.parseInt(reader.readLine()));
        }
        int count = 0;
        for (int i =0; i<list.size()-1; i++){
            if (list.get(i).equals(list.get(i + 1))){
                count++;
            }

        }
        System.out.println(count);

    }

ввод 2,4,4,4,8,8,4,12,12,14

Нужно, чтобы получилось 7, а по факту 4 получаетя


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

Автор решения: Anton Shchyrov
// Вначале сортируем, без этого никуда
Collections.sort(list);
int count = 0;
boolean dup = false;
for (int i = 0; i < list.size() - 1; i++) {
    if (list.get(i).equals(list.get(i + 1))) {
        count++;
        if (!dup) {  // при первом совпадении у нас два одинаковых числа
            dup = true;
            count++;
        }
    } else {
        dup = false;
    }
}
→ Ссылка
Автор решения: Andrew Bystrov

вначале собираем мапу, в которой ключ будет число, а значение - количество вхождений этого числа в массиве. Далее итерируемся по значениям, выбираем те, что больше 1, и суммируем.

int[] a = {2, 4, 4, 4, 8, 8, 4, 12, 12, 14};

long sum = Arrays.stream(a)
    .boxed()
    .collect(Collectors.groupingBy(
        Function.identity(),
        Collectors.counting()
    ))
    .values()
    .stream()
    .mapToLong(Long::longValue)
    .filter(it -> it > 1)
    .sum();
System.out.println(sum); // 8
→ Ссылка