使用map进行根据想要的key字段进行排序

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

        }




    }

}



猜你喜欢

转载自blog.csdn.net/weixin_41043652/article/details/80521361
今日推荐