我有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>并实现所有方法。
这可以通过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)
从文档:
返回地图的视图,其中每个值都由函数转换。地图的所有其他属性,例如迭代顺序,都保持不变。
底层地图的变化反映在此视图中。相反,该视图支持移除操作,这些操作都反映在底层映射中。