作者:最好的冥羽 | 来源:互联网 | 2022-11-25 12:25
我试图压扁地图但不丢失钥匙.
我想拥有的东西:
Map> keyToValuesMap = ...;
Stream.flattenCollection(keyToValuesMap).forEach((k,v) -> print(k, v));
其中,v
表示集合中对应于每个值的每个值k
.
一个等效的旧学校Java代码将是:
for (Map.Entry> entry : keyToValuesMap.entrySet())
{
K k = entry.getKey();
for (V v : entry.getValue())
{
print(k, v);
}
}
请注意,这个问题不仅仅是对值进行流式处理,因为它key
会丢失,如下所示:keyToValuesMap.entrySet().stream().flatMap(keyValuesEntry -> keyValuesEntry.getValue().stream()).forEach(v -> printJustV(v));
*这print
只是该对的一个示例动作.
*我在StreamEx中搜索过这样的API ,但找不到.我确信我会在那里找到它......
1> Ousmane D...:
没有流,这将更容易/紧凑:
map.forEach((k, v) -> v.forEach(e -> print(k, e)));
我发现这个解决方案非常优雅(*upvote from me*)