如何使用java流展平映射值

如何使用java流展平映射值,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我是Java streams新手,手头有一个问题。我有一张这样的地图: Map<String, List<String>> specialProductsMap 映射特殊产品映射 我想将映射值展平到一个集合,该集合包含specialProductsMap中列表中的所有字符串值。如何使用Java Streams来完成此操作?您可以使用flatMap操作符来完成此操作。这是它的样子 Set<String> valueSet = specialProductsM

我是Java streams新手,手头有一个问题。我有一张这样的地图:

Map<String, List<String>> specialProductsMap
映射特殊产品映射

我想将映射值展平到一个集合,该集合包含
specialProductsMap
中列表中的所有字符串值。如何使用Java Streams来完成此操作?

您可以使用
flatMap
操作符来完成此操作。这是它的样子

Set<String> valueSet = specialProductsMap.values().stream()
    .flatMap(List::stream)
    .collect(Collectors.toSet());
Set valueSet=specialProductsMap.values().stream()
.flatMap(列表::流)
.collect(收集器.toSet());

首先从映射中获取值列表,然后像这样使用流api

Set<String> setOfString = specialProductsMap.values().stream().flatMap(list->list.stream())
            .collect(Collectors.toSet());
Set setOfsString=specialProductsMap.values().stream().flatMap(列表->列表.stream())
.collect(收集器.toSet());
或者像这样使用方法引用

Set<String> setOfString = specialProductsMap.values().stream().flatMap(List::stream)
            .collect(Collectors.toSet());
Set-SetOfsString=specialProductsMap.values().stream().flatMap(列表::流)
.collect(收集器.toSet());

您必须流式传输您的值:

Stream myStream=specialProductsMap.values().Stream();
然后将其展平:

streammydata=myStream.flatMap(List::Stream);
然后收集一组:

Set=myData.collect(Collectors.toSet());