从map< a,b>和map< b,c>创建map< a,c>guava bimap的加分

w9apscun  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(360)

我有 Map<A, B> map1 以及 Map<B, C> map2 我需要制作一个 Map<A, C> . 我还想要一个用Guava汁的解决方案 BiMap 如果可能的话。
显然,假设集合a、b和c之间确实存在一个双射Map。我想要一个视图,也就是说我不想复制任何元素。 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> 实现所有的方法。
pb3skfrl

pb3skfrl1#

这可以通过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视图。Map的所有其他属性(如迭代顺序)保持不变。
基础Map中的更改反映在该视图中。相反,此视图支持删除操作,这些操作反映在基础Map中。

z9gpfhce

z9gpfhce2#

你可以用 Collectors.toMap 将条目流设置为转换值。

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())));   
}

相关问题