Я изучаю Java 8 - Java 11, и я получил код, который я конвертирую в java-streams . У меня есть следующие классы:
class Resource {
List<Capability> capabilities;
}
class Capability {
String namespace;
Map<String, Object> attributes;
}
У меня есть поток ресурсов, и я хочу извлечь все его атрибуты возможностей из двух разных пространств имен ("a", "b") в Map<Resource, Map<String, Object>>
, который, я уверен, не имеет дубликатов ключей.
Я сделал много попыток, используя map, flatMap, но с ними я не могу сохранить ссылку на основной объект ресурса. Используя новую функцию java9, я мог прогрессировать, но я застрял в приведенном ниже коде, где я смог вернуть все атрибуты, но в наборе.
Я еще не смог отфильтровать по пространству имен возможностей, а также поместить их в карту:
Map<Resource, Set<Object>> result = pResolved.stream()
.collect(groupingBy(t -> t, flatMapping(
resource -> resource.getCapabilities(null).stream(),
flatMapping(
cap -> cap.getAttributes().entrySet().stream(),
toSet()))));
Кажется, я на правильном пути.