[英]List with inner List to Map Java Stream Api
I have a list of elements:我有一个元素列表:
List<OuterElement> outerElements;
OuterElement object has 2 property: OuterElement 对象有 2 个属性:
String key;
List<InnerElement> innerElements;
InnerElement object has 1 property: InnerElement 对象有 1 个属性:
String value;
I need to create a map where for each innerElement will be created an Entry, where key will be outerElement key, and value will be innerElement value;我需要创建一个映射,其中为每个innerElement 创建一个条目,其中key 将是outerElement 键,value 将是innerElement 值;
Map<String, String> // actually Map<OuterElement.key, InnerElement.value>
How to do it using Stream API?如何使用 Stream API 做到这一点?
I have tried something like this, but it doesn't work:我试过这样的事情,但它不起作用:
Map<String, String> result = outerElements.stream()
.forEach(outerElement -> outerElement.getInnerElements().stream().collect(Collectors.toMap(OuterElement::getKey, InnerElement::getValue));
In addition to Ruslan answer for java 8 you could use this one:除了 Java 8 的Ruslan答案之外,您还可以使用这个:
Map<String, List<String>> collect = elements.stream()
.collect(Collectors.groupingBy(OuterElement::getKey,
Collectors.collectingAndThen(Collectors.toList(), outers -> outers.stream()
.flatMap(o -> o.getInnerElements().stream())
.map(InnerElement::getValue)
.collect(Collectors.toList()))));
if you could use something like MultiValueMap :如果您可以使用MultiValueMap 之类的东西:
MultiValueMap<String, String> map = elements.stream()
.collect(Collectors.groupingBy(OuterElement::getKey,
LinkedMultiValueMap::new,
Collectors.collectingAndThen(Collectors.toList(), outers -> outers.stream()
.flatMap(o -> o.getInnerElements().stream())
.map(InnerElement::getValue)
.collect(Collectors.toList()))));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.