Удаление из строки слов начинающихся с одной и той же буквы с помощью 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()));