Java 创建地图<;A、 C>;从地图<;A、 B>;和地图<;B、 C>;。番石榴BiMap奖励积分

Java 创建地图<;A、 C>;从地图<;A、 B>;和地图<;B、 C>;。番石榴BiMap奖励积分,java,dictionary,Java,Dictionary,我有Map-map1和Map-map2,我需要生成Map。如果可能的话,我还想使用番石榴的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? }

我有
Map-map1
Map-map2
,我需要生成
Map
。如果可能的话,我还想使用番石榴的
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?
}
公共静态地图合并(map1:Map,maps2:Map){
//实施的最佳方式?
}
*注意:与创建自己的
MergedMap implements Map
并实现所有方法相比,我更喜欢现有的解决方案。

这可以通过

公共静态地图合并(地图1、地图2){
返回Maps.transformValues(map1、map2::get);
}
从文件中:

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

基础地图中的更改将反映在此视图中。相反,此视图支持删除操作,这些操作将反映在基础映射中

您可以与条目集的流一起使用来转换值

public static <A, B, C> Map<A, C> merge(Map<A, B> map1, Map<B, C> map2) {
    return map1.entrySet().stream().collect(
       Collectors.toMap(Map.Entry::getKey, e -> map2.get(e.getValue())));   
}
公共静态地图合并(地图1、地图2){
返回map1.entrySet().stream().collect(
toMap(Map.Entry::getKey,e->map2.get(e.getValue());
}

到目前为止你尝试了什么?@pablochan我还没有“尝试”任何东西。显然,我可以创建一个
MergedMap implements Map
类并覆盖所有方法,但我希望有一个已经存在的库或guava/jdk中的某个方法可以提供帮助。如果您正在寻找现有的解决方案,您应该在问题中提到这一点。不幸的是,这确实复制了元素,而不是创建了一个视图,但除此之外,这是一个很好的解决方案。
public static <A, B, C> Map<A, C> merge(Map<A, B> map1, Map<B, C> map2) {
    return map1.entrySet().stream().collect(
       Collectors.toMap(Map.Entry::getKey, e -> map2.get(e.getValue())));   
}