package url; import com.ai.safe.common.DateUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; public class mytest { private static Log log = LogFactory.getLog(mytest.class); public static void main(String[] args) { //1.准备条件,把每个put进map的字段都装进List中 Map tmpMap = new HashMap(); Map tmpMap2 = new HashMap(); Map tmpMap3 = new HashMap(); Map tmpMap4 = new HashMap(); Map tmpMap5 = new HashMap(); Map tmpMap6 = new HashMap(); List list = new ArrayList(); tmpMap.put("creatDate","20180527123630"); tmpMap.put("remark","第2个放进来了"); tmpMap.put("id","02"); tmpMap.put("name","张三"); tmpMap.put("sex","男"); tmpMap.put("State","1"); list.add(tmpMap); tmpMap2.put("creatDate","20180526123630"); tmpMap2.put("remark","第1个放进来了"); tmpMap2.put("id","01"); tmpMap2.put("name","李四"); tmpMap2.put("sex","男"); tmpMap2.put("State","2"); list.add(tmpMap2); tmpMap3.put("creatDate","20180530153056"); tmpMap3.put("remark","第三个"); tmpMap3.put("id","03"); tmpMap3.put("name","王五"); tmpMap3.put("sex","男"); tmpMap3.put("State","3"); list.add(tmpMap3); tmpMap4.put("creatDate","20180530153057"); tmpMap4.put("remark","第4个"); tmpMap4.put("id","04"); tmpMap4.put("name","王六"); tmpMap4.put("sex","男"); tmpMap4.put("State","4"); list.add(tmpMap4); tmpMap5.put("creatDate","20180530153057"); tmpMap5.put("remark","第5个"); tmpMap5.put("id","04"); tmpMap5.put("name","王7"); tmpMap5.put("sex","男"); tmpMap5.put("State","4"); list.add(tmpMap5); tmpMap6.put("creatDate","20180530153057"); tmpMap6.put("remark","第5个"); tmpMap6.put("id","04"); tmpMap6.put("name","王8"); tmpMap6.put("sex","男"); tmpMap6.put("State","1"); list.add(tmpMap6); //2.选择要按哪些字段进行排序,比如我按创建时间和性别进行排序统计 List tmpList = list; List<Object> promoList = new ArrayList<Object>(); Map activeMap = new HashMap(); Map<Object,Object> lockMap = new HashMap<Object, Object> (); if (tmpList != null && tmpList.size()>0){ for (int j= 0;j<tmpList.size();j++){ activeMap = (Map) tmpList.get(j); //遍历获取每一个装在list里面的map //创建按creatDate+sex为key的条件,用来把条件都符合creatDate+sex的数据累加起来 String key = activeMap.get("creatDate")+"|"+activeMap.get("sex");//group by creatDate,sex if (lockMap.containsKey(key)){ //第而次进来如果有组合的key相同就把状态相同的加起来,否则就是继续走else逻辑排序起来 if (activeMap.get("State").equals("1")){ if (((Map)lockMap.get(key)).get("state1")!=null && !"".equals(((Map)lockMap.get(key)).get("state1"))){ ((Map)lockMap.get(key)).put("state1", Integer.valueOf(((Map)lockMap.get(key)).get("state1").toString()) +1); }else { ((Map)lockMap.get(key)).put("state1", 1); } }else if (activeMap.get("State").equals("2")){ if (((Map)lockMap.get(key)).get("state2")!=null && !"".equals(((Map)lockMap.get(key)).get("state2"))){ ((Map)lockMap.get(key)).put("state2", Integer.valueOf(((Map)lockMap.get(key)).get("state2").toString()) +1); }else { ((Map)lockMap.get(key)).put("state2", 1); } }else if (activeMap.get("State").equals("3")){ if (((Map)lockMap.get(key)).get("state3")!=null && !"".equals(((Map)lockMap.get(key)).get("state3"))){ ((Map)lockMap.get(key)).put("state3", Integer.valueOf(((Map)lockMap.get(key)).get("state3").toString()) +1); }else { ((Map)lockMap.get(key)).put("state3",1); } }else if (activeMap.get("State").equals("4")){ if (((Map)lockMap.get(key)).get("state4")!=null && !"".equals(((Map)lockMap.get(key)).get("state4"))){ ((Map)lockMap.get(key)).put("state4", Integer.valueOf(((Map)lockMap.get(key)).get("state4").toString()) +1); }else { ((Map)lockMap.get(key)).put("state4",1); } } }else { //一个新的creatDate+sex组成新key //第一次在key都是相同的情况下归纳所以存在的状态 if (activeMap.get("State").equals("1")){ activeMap.put("state1",1); }else if (activeMap.get("State").equals("2")){ activeMap.put("state2",1); }else if (activeMap.get("State").equals("3")){ activeMap.put("state3",1); }else if (activeMap.get("State").equals("4")){ activeMap.put("state4",1); } lockMap.put(key,activeMap); } } } //把排序好的map重新放回list for (Map.Entry<Object, Object> entry : lockMap.entrySet()){ Object object = entry.getValue(); promoList.add(object); } //把排序好的list再按creatDate时间顺序排序 try { Collections.sort(promoList, new Comparator<Object>() { @Override public int compare(Object o1, Object o2) { Calendar calendar = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); //System.out.println(o1); HashMap o1Map = (HashMap) o1; HashMap o2Map = (HashMap) o2; String date =String.valueOf(o1Map.get("creatDate")); String date2 = String.valueOf(o2Map.get("creatDate")); Date createdate= DateUtil.parse(date.replace(" ", "").replace("-", "").replace(":", ""), "yyyyMMddHHmmss"); //2016-09-23 11:24:55.0 Date createdate2 = DateUtil.parse(date2.replace(" ", "").replace("-", "").replace(":", ""), "yyyyMMddHHmmss"); int n = createdate2.compareTo(createdate); return n; } }); }catch (Exception e){ log.debug("时间排序错误"); log.error("时间排序错误"); } System.out.println("排序前"); for (int i= 0;i<list.size();i++){ Map tmap = (Map) list.get(i); System.out.println(tmap.get("id")+"|"+tmap.get("name")+"|"+tmap.get("sex")+"|"+tmap.get("State")+"|"+tmap.get("creatDate")+"|"+tmap.get("remark")); } System.out.println("排序后"); for (int i = 0; i<promoList.size();i++){ Map tmap = (Map) promoList.get(i); System.out.println(tmap.get("id")+"|"+tmap.get("name")+"|"+tmap.get("sex")+"|状态1:"+tmap.get("state1")+"|状态2:"+tmap.get("state2")+"|状态3:"+tmap.get("state3")+"|状态4:"+tmap.get("state4")+"|"+tmap.get("creatDate")+"|"+tmap.get("remark")); } } }