我有以下地图:
Map <String,String> m; // contains part details
Map <String,String> n; // contains part details
Map <String,String> o; // the new map that contains both m and n.
m
的值复制到o中。 n
并将密钥与o
进行比较。如果来自n
的密钥在o
中不存在,则将密钥/值放入o
。 我尝试了下面的内容,但第二步不起作用(值不是复制)
for (Map.Entry<String, String> entry : m.entrySet())
{
String key = entry.getKey();
String value =entry.getValue();
o.put(key, value);
}
for (Map.Entry<String, String> entry : n.entrySet())
{
String key = entry.getKey();
String value =entry.getValue();
for (Map.Entry<String, String> entry1 : o.entrySet())
{
String key1 = entry.getKey();
if(key1 != key)
{
o.put(key,value);
}
}
}
答案 0 :(得分:0)
为什么不使用现成的方法?您不必手动全部写入;)。
1)方法putAll()
将所有值从一个地图复制到第二个地图。
http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#putAll(java.util.Map)
2)方法containsKey()
并且只有一个循环。
答案 1 :(得分:0)
您不必遍历o。
只需使用o.containsKey()方法
答案 2 :(得分:0)
在第二个内部for循环&#34; String key1 = entry.getKey();&#34;它应该是&#34; String key1 = entry1.getKey();&#34; 入口和入口1之间的错误
答案 3 :(得分:0)
o.putAll(m); // put all m into o
n.keySet().removeAll(o.keySet()); // Remove all duplicates from n
o.putAll(n); // Now add all filtered n to o
答案 4 :(得分:0)
考虑使用Map#containsKey()。您还可以遍历键集,而不是遍历条目集。
for (String key: n.keySet())
{
if (!o.containsKey(key))
o.put(key,n.get(key));
}
这应该有效。 我认为问题是你使用的是直接比较字符串,这在你的情况下是不够的(几乎从不),而是使用String#compareTo()方法。