Объекты, используемые в примере, взяты из пакета org.jsoup.nodes
import org.jsoup.nodes.Attribute;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
Мне нужны групповые атрибуты по ключу с результирующим значением Set
.
Optional<Element> buttonOpt = ...;
Map<String, Set<String>> stringStringMap =
buttonOpt.map(button -> button.attributes().asList().stream()
.collect(groupingBy(Attribute::getKey,
mapping(attribute -> attribute.getValue(), toSet()))))
.orElse(new HashMap<>());
Кажется, все собрано правильно,но значение все время представляет собой одну строку (из-за реализации библиотеки), которая содержит различные значения, разделенные пробелом.Пытаюсь улучшить решение:
Map<String, Set<HashSet<String>>> stringSetMap = buttonOpt.map(
button -> button.attributes()
.asList()
.stream()
.collect(groupingBy(Attribute::getKey,
mapping(attribute ->
new HashSet<String>(Arrays.asList(attribute.getValue()
.split(" "))),
toSet()))))
.orElse(new HashMap<>());
В результате у меня другая структура Map<String, Set<HashSet<String>>>
, но мне нужно Map<String, Set<String>>
Я проверил некоторые коллекторы, но не справился с проблемой.
Вопрос:
Как объединить все наборы, связанные с одним и тем же ключом атрибута?