Lambda 使用Java8流API展平映射并关联值

Lambda 使用Java8流API展平映射并关联值,lambda,functional-programming,java-8,java-stream,flatmap,Lambda,Functional Programming,Java 8,Java Stream,Flatmap,假设我有一组字符串到一个整数值的映射: Map Map=newhashmap() 例如,map是(我们假设没有重复的字符串): 如何使用Java8流API获得另一个map类型的map,如下所示: x -> 2 y -> 2 z -> 3 u -> 4 v -> 4 w -> 4 它看起来像是一个flatMap操作,但是如何将整数值与每个字符串键适当关联?您可以这样做,创建中间映射。条目对象如下: Map<String, Integer> resu

假设我有一组字符串到一个整数值的映射:
Map Map=newhashmap()

例如,
map
是(我们假设没有重复的字符串):

如何使用Java8流API获得另一个
map
类型的
map
,如下所示:

x -> 2
y -> 2
z -> 3
u -> 4
v -> 4
w -> 4

它看起来像是一个
flatMap
操作,但是如何将整数值与每个字符串键适当关联?

您可以这样做,创建中间
映射。条目
对象如下:

Map<String, Integer> result = map.entrySet().stream()
   .<Entry<String, Integer>>flatMap(entry -> 
       entry.getKey()
            .stream()
            .map(s -> new AbstractMap.SimpleImmutableEntry<>(s, entry.getValue())))
   .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Map result=Map.entrySet().stream()
.flatMap(条目->
entry.getKey()
.stream()
.map->new AbstractMap.SimpleImmutableEntry(s,entry.getValue())
.collect(Collectors.toMap(条目::getKey,条目::getValue));
或者,您可以使用项目中的任何其他对/元组类型

请注意,我的免费库支持以更干净的方式处理此类情况(内部与上面相同):

Map result=EntryStream.of(Map).flatMapKeys(Set::stream).toMap();
该类扩展了
,并提供了其他有用的方法,如或

Map<String, Integer> result = map.entrySet().stream()
   .<Entry<String, Integer>>flatMap(entry -> 
       entry.getKey()
            .stream()
            .map(s -> new AbstractMap.SimpleImmutableEntry<>(s, entry.getValue())))
   .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
Map<String, Integer> result = EntryStream.of(map).flatMapKeys(Set::stream).toMap();