Не получается посчитать количество повторяющихся значений в массиве
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