Удаление из строки слов начинающихся с одной и той же буквы с помощью stream API

Вход: String "мама мыла раму поливая пол водой".

На выходе должны уйти все слова, в которых первая буква встречается всего один раз. С помощью stream api. Форма выходы любая в принципе, пусть это будет например лист.

Вывод: "мама мыла поливая пол"

рама и вода ушли, так как такая первая буква встречается всего один раз. Помогите пожалуйста понять, как это можно сделать.


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

Автор решения: Михаил Неудахин

Разобрался с задачей, исходно искал решение к задаче:

Есть массив со словами, отсортированными по алфавиту. К примеру: String[] mass = { "арбуз", "биржа", "бокс", "болт", "сапог", "сарай" }; Нужно получить из этого массива HashMap: [б=[биржа, бокс, болт], c=[caпог, сарай]] HashMap должен содержать только группы более чем из одного слова.

Изначально думал что нужно настраивать фильтр в исходно потоке, но потом разобрался с тем, что из полученной в потоке коллекции можно делать новые потоки и к ним применять фильтр. Вот что у меня получилось:

 String s = "сапог сарай арбуз болт бокс биржа колбаса период";

Map<String, List<String>> map = Arrays.stream(s.split("\\s+"))                
.sorted(Comparator.comparing(String::length)
.reversed().
thenComparing(String::compareTo))
.collect(Collectors.groupingBy(w -> String.valueOf(w.charAt(0)), LinkedHashMap::new, Collectors.toList()))
.entrySet()
.stream()
.filter(element->element.getValue().size()>1)
.collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue()));
→ Ссылка