List<Map<String, String>>遍历相同数据合并请教 数据遍历map合并 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比较对象,重写hashcode equals 方法 name 和city 都相同的合并 name 和city 都相同的合并 name 和city 都相同的合并 有没有可能出现 name 和city 都相同 但是channel或者date这些不相同 举个例子 比如有两个Map {count=1, name=帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿, province=江苏省, date=2014-09-23 10:13:39, channel=东环大润发, city=泰州市} {count=1, name=帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿, province=江苏省, date=2014-09-23 10:13:40, channel=东环大润发, city=泰州市} name和city都相同,但是date(或者其他的key值)不相同,那么这个时候合并过后的map,date这个值取什么? 如果不存在这种情况,参考下面的代码import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;public class Test { /** * @param args */ public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<Map<String,String>>(); Map<String,String> map1 = new HashMap<String,String>(); map1.put("count", "1"); map1.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿"); map1.put("province", "江苏省"); map1.put("date", "2014-09-23 10:13:39"); map1.put("channel", "东环大润发"); map1.put("city", "苏州市"); list.add(map1); Map<String,String> map2 = new HashMap<String,String>(); map2.put("count", "1"); map2.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿"); map2.put("province", "江苏省"); map2.put("date", "2014-09-23 10:13:39"); map2.put("channel", "东环大润发"); map2.put("city", "泰州市"); list.add(map2); Map<String,String> map3 = new HashMap<String,String>(); map3.put("count", "1"); map3.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿"); map3.put("province", "江苏省"); map3.put("date", "2014-09-23 10:13:39"); map3.put("channel", "东环大润发"); map3.put("city", "泰州市"); list.add(map3); Map<String,String> map4 = new HashMap<String,String>(); map4.put("count", "1"); map4.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿"); map4.put("province", "江苏省"); map4.put("date", "2014-09-23 10:13:39"); map4.put("channel", "东环大润发"); map4.put("city", "苏州市"); list.add(map4); System.out.println(mergeList(list)); } /** * 合并相同的Map * @param list * @return */ public static List<Map<String,String>> mergeList(List<Map<String,String>> list){ List<Map<String,String>> retList = new ArrayList<Map<String,String>>(); for(int i=0;i<list.size();i++){ Map<String,String> map = list.get(i); String name = map.get("name"); String city = map.get("city"); String count = map.get("count"); Map<String,String> newMap=isExistSame(i,name,city,count,list); if(null==newMap){ retList.add(map); } else{ list.remove(map.get(i)); retList.add(newMap); } } return retList; } private static Map<String,String> isExistSame(int i,String name,String city,String count,List<Map<String,String>> list){ Map<String,String> newMap = null; for(int j=i+1;j<list.size();j++){ Map<String,String> innerMap = list.get(j); String name1 = innerMap.get("name"); String city1 = innerMap.get("city"); String count1 = innerMap.get("count"); if(name.equals(name1)&&city.equals(city1)){ newMap = new HashMap<String,String>(); newMap.put("count", ""+(Integer.parseInt(count)+Integer.parseInt(count1))); Iterator<String> keyIterator = innerMap.keySet().iterator(); while(keyIterator.hasNext()){ String key = keyIterator.next(); if(!key.equals("count")){ newMap.put(key, innerMap.get(key)); } } list.remove(j); } } return newMap; }} public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<Map<String,String>>(); boolean m = true; for(int i=0;i<10000;i++){ HashMap<String, String> map = new HashMap<String, String>(); map.put("count", "1"); map.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿"); map.put("province", "江苏省"); map.put("date", "2014-09-23 10:13:39"); map.put("channel", "东环大润发"); map.put("city", m ? "苏州市":"泰州市"); m = !m; list.add(map); } System.out.println(System.currentTimeMillis()); for(int i=list.size();--i>-1;){ Map<String, String> src = list.get(i); int same = 0; for(int j=i-1;j>-1;j--){ Map<String, String> tar = list.get(j); if(equals(src, tar)){ int count = Integer.parseInt(src.get("count")) +Integer.parseInt(tar.get("count")); src.put("count", count+""); list.remove(j); same++; } } i -=same; } System.out.println(list); System.out.println(System.currentTimeMillis()); } public static boolean equals(Map<String, String> src,Map<String, String> tar){ Set<Entry<String,String>> entrySet = src.entrySet(); String srcCount = src.remove("count");//count不参与比较 String srcValue = null,tarValue = null; for (Iterator<Entry<String,String>> it = entrySet.iterator(); it.hasNext();) { Entry<String, String> entry = it.next(); srcValue = entry.getValue(); tarValue = tar.get(entry.getKey()); if(srcValue.length()!=tarValue.length()||!srcValue.equals(tarValue)){ src.put("count", srcCount); return false; } } src.put("count", srcCount); return true; } 一个字符串操作的问题 在一个按钮中同时添加了两个ActionListener对象会怎样 请教一个画图问题 多谢 内部类实例化 java的class问题 谁能给小弟 几个好的国内java论坛 谢谢 请大家推荐几个你们经常上的外文java技术论坛.以及一些外文的java技术网站.散分! 想用JAVA做一个类似于WINDOWS资源管理器的界面。谁有例子? 寻求JBUILDER 快捷键 java的未来! 编译成功,但是没有输出结果这时哪里出错了? static的常量也要final?
name 和city 都相同的合并
name 和city 都相同的合并 name 和city 都相同的合并
有没有可能出现 name 和city 都相同
但是channel或者date这些不相同
举个例子
比如有两个Map
{count=1, name=帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿, province=江苏省, date=2014-09-23 10:13:39, channel=东环大润发, city=泰州市}
{count=1, name=帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿, province=江苏省, date=2014-09-23 10:13:40, channel=东环大润发, city=泰州市}
name和city都相同,但是date(或者其他的key值)不相同,那么这个时候合并过后的map,date这个值取什么?
如果不存在这种情况,参考下面的代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class Test { /**
* @param args
*/
public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<Map<String,String>>();
Map<String,String> map1 = new HashMap<String,String>();
map1.put("count", "1");
map1.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿");
map1.put("province", "江苏省");
map1.put("date", "2014-09-23 10:13:39");
map1.put("channel", "东环大润发");
map1.put("city", "苏州市");
list.add(map1);
Map<String,String> map2 = new HashMap<String,String>();
map2.put("count", "1");
map2.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿");
map2.put("province", "江苏省");
map2.put("date", "2014-09-23 10:13:39");
map2.put("channel", "东环大润发");
map2.put("city", "泰州市");
list.add(map2);
Map<String,String> map3 = new HashMap<String,String>();
map3.put("count", "1");
map3.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿");
map3.put("province", "江苏省");
map3.put("date", "2014-09-23 10:13:39");
map3.put("channel", "东环大润发");
map3.put("city", "泰州市");
list.add(map3);
Map<String,String> map4 = new HashMap<String,String>();
map4.put("count", "1");
map4.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿");
map4.put("province", "江苏省");
map4.put("date", "2014-09-23 10:13:39");
map4.put("channel", "东环大润发");
map4.put("city", "苏州市");
list.add(map4);
System.out.println(mergeList(list));
}
/**
* 合并相同的Map
* @param list
* @return
*/
public static List<Map<String,String>> mergeList(List<Map<String,String>> list){
List<Map<String,String>> retList = new ArrayList<Map<String,String>>();
for(int i=0;i<list.size();i++){
Map<String,String> map = list.get(i);
String name = map.get("name");
String city = map.get("city");
String count = map.get("count");
Map<String,String> newMap=isExistSame(i,name,city,count,list);
if(null==newMap){
retList.add(map);
}
else{
list.remove(map.get(i));
retList.add(newMap);
}
}
return retList;
}
private static Map<String,String> isExistSame(int i,String name,String city,String count,List<Map<String,String>> list){
Map<String,String> newMap = null;
for(int j=i+1;j<list.size();j++){
Map<String,String> innerMap = list.get(j);
String name1 = innerMap.get("name");
String city1 = innerMap.get("city");
String count1 = innerMap.get("count");
if(name.equals(name1)&&city.equals(city1)){
newMap = new HashMap<String,String>();
newMap.put("count", ""+(Integer.parseInt(count)+Integer.parseInt(count1)));
Iterator<String> keyIterator = innerMap.keySet().iterator();
while(keyIterator.hasNext()){
String key = keyIterator.next();
if(!key.equals("count")){
newMap.put(key, innerMap.get(key));
}
}
list.remove(j);
}
}
return newMap;
}
}
List<Map<String, String>> list = new ArrayList<Map<String,String>>();
boolean m = true;
for(int i=0;i<10000;i++){
HashMap<String, String> map = new HashMap<String, String>();
map.put("count", "1");
map.put("name", "帮宝适纸尿裤L164 超薄干爽夏季透气专用婴儿尿不湿");
map.put("province", "江苏省");
map.put("date", "2014-09-23 10:13:39");
map.put("channel", "东环大润发");
map.put("city", m ? "苏州市":"泰州市");
m = !m;
list.add(map);
}
System.out.println(System.currentTimeMillis());
for(int i=list.size();--i>-1;){
Map<String, String> src = list.get(i);
int same = 0;
for(int j=i-1;j>-1;j--){
Map<String, String> tar = list.get(j);
if(equals(src, tar)){
int count = Integer.parseInt(src.get("count"))
+Integer.parseInt(tar.get("count"));
src.put("count", count+"");
list.remove(j);
same++;
}
}
i -=same;
}
System.out.println(list);
System.out.println(System.currentTimeMillis());
}
public static boolean equals(Map<String, String> src,Map<String, String> tar){
Set<Entry<String,String>> entrySet = src.entrySet();
String srcCount = src.remove("count");//count不参与比较
String srcValue = null,tarValue = null;
for (Iterator<Entry<String,String>> it = entrySet.iterator(); it.hasNext();) {
Entry<String, String> entry = it.next();
srcValue = entry.getValue();
tarValue = tar.get(entry.getKey());
if(srcValue.length()!=tarValue.length()||!srcValue.equals(tarValue)){
src.put("count", srcCount);
return false;
}
}
src.put("count", srcCount);
return true;
}