Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 6

Почему вместо 10 наиболее встречающихся в списке слов выводится не то?

04.03.2019, 17:44. Показов 2113. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть список слов petStr (в коде он объявляется на 11 строчке), некоторые слова в этом списке повторяются. Я написал код, который по задумке должен вывести десять наиболее встречающихся слов.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
String input = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
                "Sed sodales consectetur purus at faucibus. " +
                "Donec mi quam, tempor vel ipsum non, faucibus suscipit massa. " +
                "Morbi lacinia velit blandit tincidunt efficitur. " +
                "Vestibulum eget metus imperdiet sapien laoreet faucibus. " +
                "Nunc eget vehicula mauris, ac auctor lorem. Lorem ipsum dolor sit amet, " +
                "consectetur adipiscing elit. Integer vel odio nec mi tempor dignissim.";
try(BufferedInputStream fos = new BufferedInputStream(new ByteArrayInputStream(input.getBytes())))
        {
            try(Scanner s = new Scanner(fos).useDelimiter("\\A")) {
                List<String> petStr = Arrays.stream((s.hasNext() ? s.next() : "").toLowerCase().split("[^a-zA-Zа-яА-Я0-9']+")).collect(Collectors.toList());
                petStr.stream().distinct().map(ss->new int[] {petStr.indexOf(ss),Collections.frequency(petStr,ss)}).sorted(new Comparator<int[]>() {
                    @Override
                    public int compare(int[] o1, int[] o2) {
                        return o1[1]-o2[1];
                    }
                }).limit(10).map(ss->petStr.get(ss[0])).forEach(System.out::println);//
            }
        }
/*Вывод:
sed
sodales
purus
at
donec
quam
non
suscipit
massa
morbi
*/
На деле выводится десяток слов, из которых ни одно не является наиболее встречающимся, например, слово sed. Предположив, что выводится десять наименее встречающихся слов, я попробовал выводить все слова (убирал limit(10)), проверял среди выведенных десять последних и десять первых слов, и в последнем и в первом десятке были слова, которые не являются самыми встречающимися.

Логика 12-17 строчек такая:
0) имеется list слов;
1) делаю стрим строк-слов-элементов_list`а;
2) преобразовываю стрим слов в стрим массивов {int индекс_слова_в_списке; int количество_раз_когда_это_слово_встречает ся_в_list`е};
3) сортирую по массив[1], то есть по количеству;
4) лимитирую стрим на 10 элементов (чтоб потом вывести 10 самых встречающихся);
5) преобразовываю каждый элемент-массив в элемент list`а с индексом массив[0] (то есть индекс);
6) вывожу стрим. Вроде должны быть выведены 10 наиболее встречающихся слов.

Но на практике не то абсолютно выводится.
P.S. На всякий случай перечислю 10 наиболее встречающихся слов (то есть те слова, что должны быть выведены): consectetur, faucibus, ipsum, lorem, adipiscing, amet, dolor, eget, elit, mi.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2019, 17:44
Ответы с готовыми решениями:

STL: Сортировка слов по количеству согласных букв; вывод слов, встречающихся в списке более одного раза
Помогите написать программу!! Сортировка слов по количеству согласных букв; вывод слов, встречающихся в списке более одного раза. ...

20 наиболее часто встречающихся слов
дан файл. выписать 20 наиболее часто встречающихся слов в алфавитном порядке. (структуры использовать нельзя). помогите пожалуйста. заранее...

Поиск наиболее часто встречающихся слов
Помогите пожалуйста, нужно определить десятку наиболее часто встречающихся слов в 5 столбце Strigngrid

6
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.03.2019, 18:01
Java
1
2
3
Map<String, Long> frequency = Arrays.stream(INPUT.split("\\W+")).collect(groupingBy(identity(), counting()));
        List<String> result = frequency.entrySet().stream().sorted(comparingLong(entry -> -entry.getValue())).limit(10).map(Map.Entry::getKey).collect(toList());
        System.out.println(result);
1
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 6
04.03.2019, 18:35  [ТС]
Благодарю, конечно, но это не ответ на мой вопрос
Вы привели альтернативный код. А меня интересует, ГДЕ ОШИБКА В МОЁМ КОДЕ. То, что можно было бы написать гораздо более короткий код, мне понятно. Меня интересует, в каком месте мой (пусть и не самый короткий из возможных) код ошибочен, где я "промахнулся".
Я сначала предположил, что что-то не так с моим компаратором, но сколько я его не перепроверял, ошибки не находил.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.03.2019, 18:49
я твой код вообще с трудом понимаю, поэтому он плох и его надо переписать, например, как я тебе показал

Добавлено через 1 минуту
дело не в том, что он короче. Дело в том, что в нем мои намерения понятны
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
04.03.2019, 19:02
Лучший ответ Сообщение было отмечено RoterWolf как решение

Решение

Цитата Сообщение от RoterWolf Посмотреть сообщение
что-то не так с моим компаратором
именно
.sorted((o1, o2) -> o2[1]-o1[1])
1
0 / 0 / 0
Регистрация: 10.12.2018
Сообщений: 6
09.03.2019, 16:53  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
identity(), counting()
Сорри за тупость, а что это за методы?
IntelliJ IDEA их не распознаёт, вроде все импорты, связанные со стримами и коллекциями имеются. И кстати, на просто groupingBy IntelliJ IDEA у меня ругается, в отличие от Collectors.groupingBy.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
09.03.2019, 17:54
Цитата Сообщение от RoterWolf Посмотреть сообщение
вроде все импорты, связанные со стримами и коллекциями имеются
Точно?
Java
1
2
3
import static java.util.Comparator.comparingLong;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.*;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2019, 17:54
Помогаю со студенческими работами здесь

Получить 10 наиболее часто встречающихся слов
Дан символьный файл f, содержащий произвольный текст длиной более 50 слов. Слова в тексте разделены пробелами и знаками препинания....

Поиск наиболее часто встречающихся слов в файле
Дан символьный файл f, содержащий произвольный текст длиной более 5000 слов. Слова в тексте разделены пробелами и знаками препинания....

Определение наиболее часто встречающихся в диапазоне слов
Здравствуйте, уважаемые форумчане. Помогите решить вопрос. На листе в некоторые ячейки диапазона A1:K60 - вписан текст. Как...

Получить 10 наиболее часто встречающихся слов из файла
Дан символьный файл f, содержащий произвольный текст длиной более 50 слов. Слова в тексте разделены пробелами и знаками препинания....

Получить 10 наиболее часто встречающихся слов в файле
ребята, срочно нужна помощь в решении задачи!)) Жду , заранее спасибо:) Дан текстовый файл f, содержащий более 1000 слов. Получить 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru