我想编写一个方法,将地图作为参数,并用值和键替换该地图的键和值。我想这样做:
public class HashMapKeyValueInterchange{
public static Map<String, String> getMyMap(ConcurrentHashMap<String, String> m){
Map<String, String> map2 = new HashMap<String, String>();
for(Entry<String, String> e:m.entrySet()){
map2.put(e.getValue(), e.getKey());
}
return map2;
}
public static void main(String[] args) {
ConcurrentHashMap<String, String> map1 = new ConcurrentHashMap<String, String>();
map1.put("ajay", "btech");
map1.put("manas", "mca");
map1.put("ashu", "mba");
}
}
使用这个方法,我可以得到一个带有交换键和值的新地图(map2),但我想要交换map1
答案 0 :(得分:2)
可用,无需重新发明轮子,如果您使用谷歌收藏库番石榴,那么您可以使用BiMap<K,V>
。
这是一张保留其价值的唯一性的地图 它的钥匙。此约束使bimaps能够支持 “逆视图”,这是另一个包含相同条目的bimap 这个bimap,但有反向键和值。
BiMap
的实施是EnumBiMap, EnumHashBiMap, [HashBiMap][2], ImmutableBiMap
答案 1 :(得分:0)
如果问题是代码是否有效,答案是肯定的。一些评论:
getMyMap
。System.out.println( getMyMap( map1 ) );
Map
代替ConcurrentHashMap
作为getMyMap
的第一个参数类型,因此该功能更为通用,适用于其他地图。为了使您的代码更加通用,请将其设为:
public static <K,V> void getMyMap(Map<V,K> output,Map<K,V> input) {
for(Entry<K,V> e: input.entrySet() ) {
output.put(e.getValue(), e.getKey());
}
}
这将接受更多种类的Map
并将输出存储在任何类型的Map
中作为第一个参数传递。例如:
getMyMap(new TreeMap<String,String>(),map1);
getMyMap(new HashMap<String,String>(),map1);
最后一点是,在重复值时不指定行为。上面的假设是这种情况不会发生,或者输入映射中的任何键都可以作为输出值中的值接受。
答案 2 :(得分:0)
使用此代码
public static ConcurrentHashMap<String, String> getMyMap(ConcurrentHashMap<String, String> m){
ConcurrentHashMap<String, String> map2 = new ConcurrentHashMap<String, String>();
for(Entry<String, String> e:m.entrySet()){
map2.put(e.getValue(), e.getKey());
}
return map2;
}
public static void main(String[] args) {
ConcurrentHashMap<String, String> map1 = new ConcurrentHashMap<String, String>();
map1.put("ajay", "btech");
map1.put("manas", "mca");
map1.put("ashu", "mba");
map1 = getMyMap(map1);
}
答案 3 :(得分:0)
BiMap是进行此类操作的不错选择
如果您尝试将密钥映射到已存在的值,BiMap是一张地图 允许您使用inverse()查看“逆”BiMap 确保值是唯一的,使values()成为Set
BiMap.put(key, value)
将抛出IllegalArgumentException
。如果您希望删除任何具有指定值的预先存在的条目,请改用BiMap.forcePut(key, value)
。
BiMap<String, Integer> userId = HashBiMap.create();
String userForId = userId.inverse().get(id);
查看here了解更多信息