本文介绍了Java反转映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建反向映射 - 选择唯一值并为他们找到键。
似乎只有这样才能迭代所有的键/值对,因为entrySet返回的值不是唯一的值?
谢谢。

I need create inverse map - select unique values and for them find keys.Seems that only way is to iterate all key/value pairs, because entrySet returns set of so value not unique?Thanks.

推荐答案

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

The values in a map may not be unique. But if they are (in your case) you can do as you wrote in your question and create a generic method to convert it:

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, c -> c.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(..,..)方法将返回一个键的旧值。如果它不是null,你可能会抛出一个新的IllegalArgumentException(Map值必须是唯一的)或类似的东西。


Side note: the put(.., ..) method will return the the "old" value for a key. If it is not null you may throw a new IllegalArgumentException("Map values must be unique") or something like that.

这篇关于Java反转映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 11:16