求助如下:list<map>按照map的BASETYPE和TASKDATE分组合并TYPE

期望得到这样的顺序B2--1月---{TASKDATE=1月, SDATE=null, DATEID=null, BASETYPE=B2, XSDATE=B2-1月, BLU APP类1=19000.0, BLU APP类=2000.0, Sorting数量=91000, Sorting不良率=50}

目前这个那顺序有点乱,希望帮忙实现,不胜感激!

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class BTest {

    public static void main(String args[]) {
        List<LinkedHashMap<String, Object>> list = new ArrayList<LinkedHashMap<String, Object>>();
        ArrayList<LinkedHashMap<String, Object>> res = new ArrayList<LinkedHashMap<String, Object>>();
        List<HashMap<String, Object>> resm = new ArrayList<HashMap<String, Object>>();
        LinkedHashMap<String, Object> map1 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map2 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map3 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map4 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map5 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map6 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map7 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map8 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map9 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map10 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map11 = new LinkedHashMap<String, Object>();
        LinkedHashMap<String, Object> map12 = new LinkedHashMap<String, Object>();

        map1.put("TASKDATE", "1月");
        map1.put("BASETYPE", "B1");
        map1.put("TYPE", "BLU APP类");
        map1.put("PPM", "50");
        map1.put("TYPENUMBER", "2000");
        map1.put("TASKNUMBER", "91000");

        map7.put("TASKDATE", "1月");
        map7.put("BASETYPE", "B1");
        map7.put("TYPE", "BLU APP类1");
        map7.put("PPM", "50");
        map7.put("TYPENUMBER", "2000");
        map7.put("TASKNUMBER", "91000");

        map2.put("TASKDATE", "2月");
        map2.put("BASETYPE", "B1");
        map2.put("TYPE", "BLU APP类1");
        map2.put("PPM", "50");
        map2.put("TYPENUMBER", "1000");
        map2.put("TASKNUMBER", "1000");

        map8.put("TASKDATE", "2月");
        map8.put("BASETYPE", "B1");
        map8.put("TYPE", "BLU APP类");
        map8.put("PPM", "50");
        map8.put("TYPENUMBER", "2000");
        map8.put("TASKNUMBER", "1000");

        map3.put("TASKDATE", "3月");
        map3.put("BASETYPE", "B1");
        map3.put("TYPE", "BLU APP类1");
        map3.put("PPM", "50");
        map3.put("TYPENUMBER", "18000");
        map3.put("TASKNUMBER", "391000");

        map9.put("TASKDATE", "3月");
        map9.put("BASETYPE", "B1");
        map9.put("TYPE", "BLU APP类");
        map9.put("PPM", "50");
        map9.put("TYPENUMBER", "2000");
        map9.put("TASKNUMBER", "391000");

        map4.put("TASKDATE", "1月");
        map4.put("BASETYPE", "B2");
        map4.put("TYPE", "BLU APP类1");
        map4.put("PPM", "50");
        map4.put("TYPENUMBER", "19000");
        map4.put("TASKNUMBER", "91000");

        map10.put("TASKDATE", "1月");
        map10.put("BASETYPE", "B2");
        map10.put("TYPE", "BLU APP类");
        map10.put("PPM", "50");
        map10.put("TYPENUMBER", "2000");
        map10.put("TASKNUMBER", "91000");

        map5.put("TASKDATE", "2月");
        map5.put("BASETYPE", "B2");
        map5.put("TYPE", "BLU APP类1");
        map5.put("PPM", "50");
        map5.put("TYPENUMBER", "19000");
        map5.put("TASKNUMBER", "91000");

        map11.put("TASKDATE", "2月");
        map11.put("BASETYPE", "B2");
        map11.put("TYPE", "BLU APP类");
        map11.put("PPM", "50");
        map11.put("TYPENUMBER", "2000");
        map11.put("TASKNUMBER", "91000");

        map6.put("TASKDATE", "3月");
        map6.put("BASETYPE", "B2");
        map6.put("TYPE", "BLU APP类1");
        map6.put("PPM", "50");
        map6.put("TYPENUMBER", "19000");
        map6.put("TASKNUMBER", "591000");

        map12.put("TASKDATE", "3月");
        map12.put("BASETYPE", "B2");
        map12.put("TYPE", "BLU APP类");
        map12.put("PPM", "50");
        map12.put("TYPENUMBER", "2000");
        map12.put("TASKNUMBER", "591000");
        list.add(map1);
        list.add(map7);
        list.add(map2);
        list.add(map8);
        list.add(map3);
        list.add(map9);
        list.add(map4);
        list.add(map10);
        list.add(map5);
        list.add(map11);
        list.add(map6);
        list.add(map12);
        name4(list);
    }

    private static void name4(List<LinkedHashMap<String, Object>> list) {

        List<Object> tempList = (List<Object>) list.stream().map(pc -> pc.get("BASETYPE")).distinct()
                .collect(Collectors.toList());

        Map<String, List<Map<String, Object>>> onekeyMap = new LinkedHashMap<>();

        for (LinkedHashMap<String, Object> obj : list) {
            String one = "";
            // 根据groupList的第一层
            one = obj.get("BASETYPE").toString();
//
            if (null == onekeyMap.get(one)) {
                onekeyMap.put(one, new ArrayList<>());
            }
            onekeyMap.get(one).add(obj);
        }
        System.out.println(onekeyMap);
        System.out.println("----------------------------");

        ArrayList<LinkedHashMap<String, Object>> result = new ArrayList<LinkedHashMap<String, Object>>();

        for (Map.Entry<String, List<Map<String, Object>>> oneEntry : onekeyMap.entrySet()) {
            List<Map<String, Object>> resultList = new ArrayList<>();
            LinkedHashMap<String, Object> twoMap = new LinkedHashMap<>();
            LinkedHashMap<String, Object> twoMapx = new LinkedHashMap<>();
            List<Map<String, Object>> twoList = oneEntry.getValue();
            List<Object> tempListDate = (List<Object>) twoList.stream().map(pc -> pc.get("TASKDATE")).distinct()
                    .collect(Collectors.toList());
            // System.out.println(oneEntry.getKey());
            System.out.println(twoList);
            System.out.println("============================");
            for (Object x : tempListDate) {
                LinkedHashMap<String, Object> newmap = new LinkedHashMap<>();
                LinkedHashMap<String, Object> Nummap = new LinkedHashMap<>();

                for (int i = 0; i < twoList.size(); i++) {
                    Map<String, Object> map = twoList.get(i);
                    Nummap.put("Sorting数量", map.get("TASKNUMBER").toString());
                    Nummap.put("Sorting不良率", map.get("PPM").toString());
                    // if(x+"-"+oneEntry.getKey()).equals(map.get("TASKDATE")+"-"+map.get("BASETYPE")))
                    // {
                    if (oneEntry.getKey().equals(map.get("BASETYPE"))) {
                        if (x.equals(map.get("TASKDATE"))) {
                            Double sortingBadRatio = 0.0;// 不良率;
                            Double taskNum = 0.0; // sorting数量
                            Double typeNum = 0.0; // 分类的数量
                            newmap.put("TASKDATE", map.get("TASKDATE"));
                            newmap.put("SDATE", map.get("SDATE"));
                            newmap.put("DATEID", map.get("DATEID"));
                            newmap.put("BASETYPE", oneEntry.getKey());
                            newmap.put("XSDATE", oneEntry.getKey() + "-" + x);
                            taskNum = Double.parseDouble(map.get("TASKNUMBER").toString());
                            sortingBadRatio = Double.parseDouble(map.get("PPM").toString());
                            // newmap.put("Sorting数量", DateFormatList.getDecimalAuto(taskNum));
                            // newmap.put("Sorting不良率", DateFormatList.getDecimalAuto(sortingBadRatio));
                            typeNum = Double.parseDouble(map.get("TYPENUMBER").toString());
                            newmap.put(map.get("TYPE").toString(), typeNum);

                        } else {

                            continue;
                            // newmap = new LinkedHashMap<>();
                        }
                    } else {
                        // newmap.put("Sorting数量", map.get("TASKNUMBER").toString());
                        // newmap.put("Sorting不良率", map.get("PPM").toString());
                        continue;

                    }

                    // Nummap.putAll(newmap);

                    newmap.putAll(Nummap);

                    // newmap.put("Sorting数量", map.get("TASKNUMBER").toString());
                    // newmap.put("Sorting不良率", map.get("PPM").toString());
                    // System.out.println(oneEntry.getKey()+"--"+x+"---"+newmap+"--"+i);
                }
                System.out.println(oneEntry.getKey() + "--" + x + "---" + newmap);
                resultList.add(newmap);
            }
            twoMap.put(oneEntry.getKey(), resultList);

            // System.out.println(twoMap);

            result.add(twoMap);
        }

        System.out.println("++++++++++++++++++++++++");
        System.out.println(result);
        System.out.println("++++++++++++++++++++++++");
        // System.out.println(resultX);
    }

}

 

直接发你的原题吧