加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何反转地图

发布时间:2020-12-15 04:19:00 所属栏目:Java 来源:网络整理
导读:我们来看一张地图: A – {1,2,3} B – {3,4,5} C – {2,3,5} 我需要反转这张地图并获得: 1 – {一个} 2 – {A,C} 3 – {A,B,C} 4 – {B} 5 – {B,C} 我用这段代码完成了它: public static U,V MapV,SetU reverseMap(MapU,SetV map) { MapV,SetU result =
我们来看一张地图:

> A – > {1,2,3}
> B – > {3,4,5}
> C – > {2,3,5}

我需要反转这张地图并获得:

> 1 – > {一个}
> 2 – > {A,C}
> 3 – > {A,B,C}
> 4 – > {B}
> 5 – > {B,C}

我用这段代码完成了它:

public static <U,V> Map<V,Set<U>> reverseMap(Map<U,Set<V>> map) {
  Map<V,Set<U>> result = Maps.newHashMap();
  for(Map.Entry<U,Set<V>> entry : map.entrySet()) {
    for(V value : entry.getValue()) {

      Set<U> set = result.get(value);
      if(set == null) {
        set = Sets.newHashSet();
        result.put(value,set);
      }
      set.add(entry.getKey());
      result.put(value,set);
    }

  }
  return result;
}

但这只是一个反向索引,所以我认为可能存在一个预定义的方法来做到这一点.

有人知道这样的图书馆吗?番石榴的方法?

解决方法

如果您替换HashMap< U,Set< V>>通过HashMultimap< U,V> (它们是等效的,Multimap更易于使用),您现在可以使用 Multimaps.invertFrom()来填充Multimap< V,U>.

请注意,正如Javadoc所提到的,如果使用ImmutableMultimap,则可以直接调用ImmutableMultimap.inverse().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读