我有一个映射,其中键是一个字符串,值是逗号分隔的值列表。如何变换映射中的键/值
我怎样才能扭转键/值对的顺序,并分配给新的地图,使键成为值和值将成为关键
所以:
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
一个可能的解决方案是遍历每个值,然后迭代每个键 搜索相同的对应值。如果找到这个新的键/值对添加到一个新的地图。 这似乎效率低下?
溶液(使用接受的答案实现):
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);
}
}
}
你也可以检查这个。看起来相似。 http://stackoverflow.com/questions/7549640/reversing-a-hashmap-from-mapstring-boolean-to-mapboolean-liststring – titogeo