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"));
}
}
}
