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

我有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?
}

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

回答

这可以通过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);
}

从文档:

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

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


以上是从Map&lt;A,B&gt;和Map&lt;B,C&gt;创建Map&lt;A,C&gt;。GuavaBiMap的奖励积分的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>