从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);
}
从文档:
返回地图的视图,其中每个值都由函数转换。地图的所有其他属性,例如迭代顺序,都保持不变。
底层地图的变化反映在此视图中。相反,该视图支持移除操作,这些操作都反映在底层映射中。
THE END
二维码