从 Map<A,B> 和 Map<B,C> 创建 Map<A,C>。Guava BiMap 的奖励积分

Rub*_*unk 0 java dictionary

我有Map<A, B> map1并且Map<B, C> map2我需要制作一个Map<A, C>. BiMap如果可能的话,我也想要一个使用番石榴的解决方案。

显然,假设集合 A、B 和 C 之间确实存在双射映射。我想要一个视图,即我不想制作任何元素的副本。

map1并且map2是不可变的。

public static <A, B, C> Map<A, C> merge(map1: Map<A, B>, maps2: Map<B, C>) {
    // best way to implement?
}
Run Code Online (Sandbox Code Playgroud)

*注意:我更喜欢现有的解决方案,而不是创建自己的解决方案MergedMap<A, B, C> implements Map<A, C>并实现所有方法。

pru*_*nge 7

这可以通过Maps.transformValues() 完成

public static <A, B, C> Map<A, C> merge(Map<A, B> map1, Map<B, C> map2) {
    return Maps.transformValues(map1, map2::get);
}
Run Code Online (Sandbox Code Playgroud)

从文档:

返回地图的视图,其中每个值都由函数转换。地图的所有其他属性,例如迭代顺序,都保持不变。

底层地图的变化反映在此视图中。相反,该视图支持移除操作,这些操作都反映在底层映射中。