如何合并两个Map的value(key相同)? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么要这么做呢?你把key做遍历,两次循环,遇到一样的就把相同的value合并就好啦,java似乎没有提供这样的api 我查了common collection的api,似乎也没看到相应的api看样子只能遍历合并了原因是:项目中数据库操作的数据都放在map中,有两次操作就需要合并map了 Map = Kev=>Value如果2个map有重复的,怎么办?保留哪一个呢?如果你不在意, map1.addAll(map2) 就行了 有同样的key。你要留住哪个属性?map里不能有2个key! 两个map的key完全相同只是要合并key对应的value 楼主的意思是不是 将两个map中 key相同的value合并起来成为一个新的object,以该object为value原先key为key,生成一个新的Map?? public static void main(String[] args) { // Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> now = new HashMap<String, Object>(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("1",new Integer(1)); map1.put("2",new Integer(2)); map1.put("3",new Integer(3)); Map<String, Object> map2 = new HashMap<String, Object>(map1); Set<String> set = map1.keySet(); Iterator<String> i = set.iterator(); while (i.hasNext()) { String s1 = i.next(); now.put(s1,new Object[] {map1.get(s1), map2.get(s1)}); } } 哪有上面他们说的那么麻烦,如下即可: HashMap map=new HashMap(); map.put("1", "A"); HashMap map1 = new HashMap(); map1.put("2", "B"); map1.put("3", "C"); map.putAll(map1); System.out.println(map);打印结果:{3=C, 2=B, 1=A}如果是如下: HashMap map=new HashMap(); map.put("1", "A"); HashMap map1 = new HashMap(); map1.put("2", "B"); map1.put("1", "C"); map.putAll(map1); System.out.println(map);打印结果:{2=B, 1=C}所以说用putAll就可以合并两个MAP,只不过如果有相同的key那么用后面的覆盖前面的 now.put(s1,new Object[] {map1.get(s1), map2.get(s1)});如果map中key对应value是数组,没有对其进行合并也就是如果value1中有三个值,value2中有五个值,合并之后应该有八个值了 public static void main(String[] args)throws Exception { Map<String,List<String>> m1=new HashMap<String,List<String>>(); Map<String,List<String>> m2=new HashMap<String,List<String>>(); List<String> list1=new ArrayList<String>(Arrays.asList("A","B","C")); List<String> list2=new ArrayList<String>(Arrays.asList("D","E","F")); m1.put("1",list1); m2.put("1",list2); Map<String,List<String>> map=new HashMap<String,List<String>>(); Set<String> set=m1.keySet(); Iterator<String> it=set.iterator(); while(it.hasNext()) { String str=it.next(); map.put(str,new ArrayList<String>( Arrays.asList(m1.get(str),m2.get(str)) ) ); } System.out.println("m1 \n"+m1); System.out.println("m2 \n"+m2); System.out.println("合并后的Map \n"+map);}这个行吗,我身边API,在网吧做的,嘿嘿,估计很烂 可以将两个Map中相同key的value放在一个vector里面。然后将这个vector作为一个value与这个可以相对应就可以了 map.put(str, new ArrayList<String>(Arrays.asList(m1.get(str), m2.get(str))));这句编译不过 /** * 将两个map中key相同的value合并起来 * * @param map1 * @param map2 * @return */ public static Map combine(Map map1, Map map2) { if ("0".equals(getString(map1, "resultCount"))) { return map2; } Object[] value1 = null; Object[] value2 = null; Set set = map1.keySet(); Iterator iterator = set.iterator(); Object key = null; List list = null; for (int index = 0; index < set.size(); index++) { key = iterator.next(); Object valueTemp1 = map1.get(key); Object valueTemp2 = map2.get(key); if (null == valueTemp1 || null == valueTemp2) { continue; } value1 = ((List) valueTemp1).toArray(); value2 = ((List) valueTemp2).toArray(); Object[] value = new Object[value1.length + value2.length]; System.arraycopy(value1, 0, value, 0, value1.length); System.arraycopy(value2, 0, value, value1.length, value2.length); list = (List) Arrays.asList(value); log.debug("key is:" + key + ",after combine,list is:" + list); map1.put(key, list); } return map1; }这是我目前使用的代码,希望大家提出意见 取消任务 clone后为什么不equals 关于线程安全的疑问 如何往JTable中动态添加数据????? 新手~~关于异常的使用问题,谢谢! 一个关于事件的疑惑,请大侠帮忙啦 大家看看这个程序对不对?请教!!!! 在Eclipse中配置Tomcat 如何分拆以下的类? 请问一下rowset是个什么东西,见内容 this用法的问题 extends与super的问题,下面代码中红色的部分是什么意思
看样子只能遍历合并了
原因是:项目中数据库操作的数据都放在map中,有两次操作就需要合并map了
只是要合并key对应的value
public static void main(String[] args) {
// Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> now = new HashMap<String, Object>();
Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("1",new Integer(1));
map1.put("2",new Integer(2));
map1.put("3",new Integer(3));
Map<String, Object> map2 = new HashMap<String, Object>(map1);
Set<String> set = map1.keySet();
Iterator<String> i = set.iterator();
while (i.hasNext()) {
String s1 = i.next();
now.put(s1,new Object[] {map1.get(s1), map2.get(s1)});
}
}
HashMap map=new HashMap();
map.put("1", "A");
HashMap map1 = new HashMap();
map1.put("2", "B");
map1.put("3", "C");
map.putAll(map1);
System.out.println(map);打印结果:
{3=C, 2=B, 1=A}
如果是如下:
HashMap map=new HashMap();
map.put("1", "A");
HashMap map1 = new HashMap();
map1.put("2", "B");
map1.put("1", "C");
map.putAll(map1);
System.out.println(map);
打印结果:
{2=B, 1=C}所以说用putAll就可以合并两个MAP,只不过如果有相同的key那么用后面的覆盖前面的
如果map中key对应value是数组,没有对其进行合并
也就是如果value1中有三个值,value2中有五个值,合并之后应该有八个值了
Map<String,List<String>> m1=new HashMap<String,List<String>>();
Map<String,List<String>> m2=new HashMap<String,List<String>>(); List<String> list1=new ArrayList<String>(Arrays.asList("A","B","C"));
List<String> list2=new ArrayList<String>(Arrays.asList("D","E","F"));
m1.put("1",list1);
m2.put("1",list2);
Map<String,List<String>> map=new HashMap<String,List<String>>();
Set<String> set=m1.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()) {
String str=it.next();
map.put(str,new ArrayList<String>( Arrays.asList(m1.get(str),m2.get(str)) ) );
} System.out.println("m1 \n"+m1);
System.out.println("m2 \n"+m2);
System.out.println("合并后的Map \n"+map);
}
这个行吗,我身边API,在网吧做的,嘿嘿,估计很烂
这句编译不过
/**
* 将两个map中key相同的value合并起来
*
* @param map1
* @param map2
* @return
*/
public static Map combine(Map map1, Map map2) {
if ("0".equals(getString(map1, "resultCount"))) {
return map2;
}
Object[] value1 = null;
Object[] value2 = null;
Set set = map1.keySet();
Iterator iterator = set.iterator();
Object key = null;
List list = null;
for (int index = 0; index < set.size(); index++) {
key = iterator.next();
Object valueTemp1 = map1.get(key);
Object valueTemp2 = map2.get(key);
if (null == valueTemp1 || null == valueTemp2) {
continue;
}
value1 = ((List) valueTemp1).toArray();
value2 = ((List) valueTemp2).toArray();
Object[] value = new Object[value1.length + value2.length];
System.arraycopy(value1, 0, value, 0, value1.length);
System.arraycopy(value2, 0, value, value1.length, value2.length);
list = (List) Arrays.asList(value);
log.debug("key is:" + key + ",after combine,list is:" + list);
map1.put(key, list);
}
return map1;
}这是我目前使用的代码,希望大家提出意见