Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2015, 21:54   #1
korgeflus
Новичок
Джуниор
 
Регистрация: 01.11.2015
Сообщений: 1
По умолчанию Задание на Stream API

Здравствуйте уважаемые форумчане! Помогите пожалуйста решить, вот условие:

Напишите программу, читающую из System.in текст в кодировке UTF-8, подсчитывающую в нем частоту появления слов, и в конце выводящую 10 наиболее часто встречающихся слов.

Словом будем считать любую непрерывную последовательность символов, состоящую только из букв и цифр. Например, в строке "Мама мыла раму 33 раза!" ровно пять слов: "Мама", "мыла", "раму", "33" и "раза".

Подсчет слов должен выполняться без учета регистра, т.е. "МАМА", "мама" и "Мама" — это одно и то же слово. Выводите слова в нижнем регистре.

Если в тексте меньше 10 уникальных слов, то выводите сколько есть.

Если в тексте некоторые слова имеют одинаковую частоту, т.е. их нельзя однозначно упорядочить только по частоте, то дополнительно упорядочите слова с одинаковой частотой в лексикографическом порядке.

Задача имеет красивое решение через стримы без циклов и условных операторов. Попробуйте придумать его.

Sample Input 1:

Мама мыла-мыла-мыла раму!

Sample Output 1:

мыла
мама
раму


Sample Input 2:

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.

Sample Output 2:

consectetur
faucibus
ipsum
lorem
adipiscing
amet
dolor
eget
elit
mi
korgeflus вне форума Ответить с цитированием
Старый 02.11.2015, 05:40   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
public static void main (String[] args) throws java.lang.Exception
{
    Comparator<Map.Entry<String, Integer>> c1 = Comparator.comparing(Map.Entry::getValue, Comparator.reverseOrder());
    Comparator<Map.Entry<String, Integer>> c2 = Comparator.comparing(Map.Entry::getKey);
        
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    Stream<String> stream = in.lines();
    stream.flatMap(x -> stream(x.split("\\W+")))
          .map(String::toLowerCase)
          .collect(Collectors.groupingBy(x -> x, Collectors.summingInt(p -> 1)))
          .entrySet()
          .stream()
          .sorted(c1.thenComparing(c2))
          .map(x -> x.getKey())
          .limit(10)
          .forEach(System.out::println);
}
Джаву не знаю, но задачка интересная.
Вот такой велосипед получился - 100% работоспособности не гарантирую
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 02.11.2015 в 05:43.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stream MorgunZ C# (си шарп) 5 10.04.2015 22:12
stream в C++ artush1984 Общие вопросы C/C++ 6 30.01.2013 20:19
работа с stream Wi1D Общие вопросы C/C++ 4 29.12.2009 21:13
Variant to Stream & Variant from Stream Oreol Общие вопросы Delphi 1 24.03.2009 13:14
Socket vs Stream JoanM Работа с сетью в Delphi 1 01.04.2008 10:10