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();