Java 反转图

新手上路,请多包涵

我需要创建逆映射 - 选择唯一值并为它们找到键。似乎唯一的方法是迭代所有键/值对,因为 entrySet 返回一组 所以值不是唯一的?

原文由 user710818 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 619
2 个回答

地图中的值可能不是唯一的。但是如果它们是(在你的情况下)你可以按照你在问题中写的那样做并创建一个通用方法来转换它:

 private static <V, K> Map<V, K> invert(Map<K, V> map) {

    Map<V, K> inv = new HashMap<V, K>();

    for (Entry<K, V> entry : map.entrySet())
        inv.put(entry.getValue(), entry.getKey());

    return inv;
}

Java 8:

 public static <V, K> Map<V, K> invert(Map<K, V> map) {
    return map.entrySet()
              .stream()
              .collect(Collectors.toMap(Entry::getValue, Entry::getKey));
}

使用示例:

 public static void main(String[] args) {

    Map<String, Integer> map = new HashMap<String, Integer>();

    map.put("Hello", 0);
    map.put("World!", 1);

    Map<Integer, String> inv = invert(map);

    System.out.println(inv); // outputs something like "{0=Hello, 1=World!}"
}


旁注: put(.., ..) 方法将返回键的“旧”值。如果它不为空,您可能会抛出 new IllegalArgumentException("Map values must be unique") 或类似的东西。

原文由 dacwe 发布,翻译遵循 CC BY-SA 4.0 许可协议

看看 Google Guava BiMap

用法示例

Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");

Map<String, Integer> inverted = HashBiMap.create(map).inverse();

原文由 Rhangaun 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题