我有一个 Map,其中键是字符串,值是逗号分隔的值列表。
如何反转键/值对的顺序并分配给新 Map 以便键成为值,值成为键
所以 :
key value key1 value1,value2,value3 key2 value1,value4,value5 key3 value4,value2,value1
变成:
key value value1 key1,key2,key3 value2 key1,key3 value3 key1 value4 key2,key3 value5 key2
一种可能的解决方案是迭代每个值,然后迭代每个键以搜索相同的对应值。如果找到,则将此新键/值对添加到新 Map。这似乎效率低下?
解决方案(使用接受的答案实施):
import java.util.HashMap;
import java.util.Map;
public class MapTransformer {
    public static void main(String args[]) {
        Map<String, String> m1 = new HashMap<String, String>();
        m1.put("key1", "value1,value2");
        m1.put("key2", "value5");
        m1.put("key3", "value4,value2,value1");
        Map<String, String> inverseMap = new HashMap<String, String>();
        for (Map.Entry<String, String> entry : m1.entrySet()) {
            for (String value : entry.getValue().split(",")) {
                if (inverseMap.containsKey(value))
                    inverseMap.put(value, inverseMap.get(value) + "," + entry.getKey());
                else
                    inverseMap.put(value, entry.getKey());
            }
        }
        for (Map.Entry<String, String> entry : inverseMap.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+" "+value);
        }
    }
}