假设有两个HashMap,他们的SIZE及KEY都是相等的,只有值不同,现在要把两个HashMap合并成一样,使得所有KEY相等的VALUE都能合并起来,也就是合并后的HashMap是之前两个的并集。
比如hm1.put("1","123") hm2.put("1","1234"),要使最后的结果为hm3("1","123,1234")
当然,value可能是空值,或者是一个LIST ,如hm1.put("1",list),而另一个是空值或者String或者也是 list。
不考虑 value也相等的情况,不知道有没有好的方法可以合并两个HashMap
比如hm1.put("1","123") hm2.put("1","1234"),要使最后的结果为hm3("1","123,1234")
当然,value可能是空值,或者是一个LIST ,如hm1.put("1",list),而另一个是空值或者String或者也是 list。
不考虑 value也相等的情况,不知道有没有好的方法可以合并两个HashMap
import java.util.Iterator;
import java.util.Map;public class HashMapMerge { public static void main(String[] args) {
Map<String, String> map1 = new HashMap<String,String>();
map1.put("vowel", "a");
map1.put("consonant", "b");
Map<String, String> map2 = new HashMap<String,String>();
map2.put("vowel", "e");
map2.put("consonant", "c");
Map<String, String> map3 = new HashMap<String,String>();
Iterator<String> keys = map1.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
map3.put(key, map1.get(key)+","+map2.get(key));
}
System.out.println(map3);
}}
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("1","123");
map1.put("2",null);
Map<String,Object> map2=new HashMap<String,Object>();
map2.put("1","1234");
List<String> list=new ArrayList<String>();
list.add("fdssdf");
map2.put("2",list);
map2.put("3","werwe");
Map<String,Object> map3=new HashMap<String,Object>();
map3.putAll(map1);
Set<String> set2=map2.keySet();
for(String key:set2){
if(map3.isEmpty()||!map3.containsKey(key)){
map3.put(key,map2.get(key));
}else{
Object obj=map2.get(key);
Object obj3=map3.get(key);
if(obj3 instanceof String){
if(obj instanceof String){
map3.put(key, (String)obj+(String)obj3);
}
if(obj instanceof List){
((List)obj).add(obj);
}
}
if(obj3 instanceof List){
if(obj instanceof String){
map3.put(key, (String)obj+(String)obj3);
}
if(obj instanceof List){
((List)obj).addAll((List)obj);
}
}
if(obj3==null)
map3.put(key,obj);
}
}
System.out.println(map3);
}
参见方法combineMap
可以处理以下各种情形:
1。两个value都是string
2。两个value都是collection
3。其中一个value是collection
4。其中一个value是null
5。两个value都是null
**/import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class TestHashMap {
public void test_combine_two_maps() {
List<Object> list = new ArrayList<Object>();
list.add("55");
Map<String, Object> map1 = new HashMap<String,Object>();
map1.put("1", "123");
map1.put("2", list);
map1.put("3", null);
map1.put("4", null);
Map<String, Object> map2 = new HashMap<String,Object>();
map2.put("1", "1234");
map2.put("2", "66");
map2.put("3", "77");
map2.put("4", null);
Map map3 = combineMap(map1, map2);
System.out.println("Map3: " + map3);
}
public Map<String, Object> combineMap(Map<String, Object> map1, Map<String, Object> map2) {
if (map1 == null || map2 == null) return null;
if (map1.size() != map2.size())
throw new IllegalArgumentException("Maps must have the same size");
Map<String, Object> map = new HashMap<String,Object>();
Iterator<String> it = map1.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
Object value1 = map1.get(key);
Object value2 = map2.get(key);
Object value = null;
if (value1 instanceof Collection) {
if (value2 instanceof Collection) {
value = ((Collection)value1).addAll((Collection)value2);
}
else {
value = ((Collection)value1).add(value2);
}
}
else if (value1 != null) {
if (value2 instanceof Collection) {
value = ((Collection)value2).add(value1);
}
else if (value2 != null) {
value = value1 + ", " + value2;
}
else {
value = value1;
}
}
else {
if (value2 != null) {
value = value2;
}
else {
value = null;
}
}
map.put(key, value);
}
return map;
} /**
* @param args
*/
public static void main(String[] args) {
TestHashMap test = new TestHashMap();
test.test_combine_two_maps();
}
}
参见方法combineMap
可以处理以下各种情形:
1。两个value都是string
2。两个value都是collection
3。其中一个value是collection
4。其中一个value是null
5。两个value都是null
**/import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class TestHashMap {
public void test_combine_two_maps() {
List<Object> list = new ArrayList<Object>();
list.add("55");
Map<String, Object> map1 = new HashMap<String,Object>();
map1.put("1", "123");
map1.put("2", list);
map1.put("3", null);
map1.put("4", null);
Map<String, Object> map2 = new HashMap<String,Object>();
map2.put("1", "1234");
map2.put("2", "66");
map2.put("3", "77");
map2.put("4", null);
Map map3 = combineMap(map1, map2);
System.out.println("Map3: " + map3);
}
public Map<String, Object> combineMap(Map<String, Object> map1, Map<String, Object> map2) {
if (map1 == null || map2 == null) return null;
if (map1.size() != map2.size())
throw new IllegalArgumentException("Maps must have the same size");
Map<String, Object> map = new HashMap<String,Object>();
Iterator<String> it = map1.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
Object value1 = map1.get(key);
Object value2 = map2.get(key);
Object value = null;
if (value1 instanceof Collection) {
if (value2 instanceof Collection) {
value = ((Collection)value1).addAll((Collection)value2);
}
else {
value = ((Collection)value1).add(value2);
}
}
else if (value1 != null) {
if (value2 instanceof Collection) {
value = ((Collection)value2).add(value1);
}
else if (value2 != null) {
value = value1 + ", " + value2;
}
else {
value = value1;
}
}
else {
if (value2 != null) {
value = value2;
}
else {
value = null;
}
}
map.put(key, value);
}
return map;
} /**
* @param args
*/
public static void main(String[] args) {
TestHashMap test = new TestHashMap();
test.test_combine_two_maps();
}
}
不清楚你具体遇到了什么需求,需要这么做;
对于map的value,如果是object,判断是否equals,需要你重写equals()方法;如果value是list,对于list中的object也需要这样,得事先知道所存object的class,挺麻烦。