stream 分类变成多层map

按照组合键分类
    1,list分类 用stream分类,自动变成map,可以组合属性分类 直接用groupb有,连用几个分几层,也可逐级分类,用一级分类一级,不必一步到位
    
    //    private static String fetchGroupKeyDaypart(String channelCode, String dateTypeCode, TemplateDimension templateDimension) {
//        return channelCode + "#" + dateTypeCode + "#" + templateDimension.getDaypartCode();
//    }

List mapDateTypeValue = dateType.getValue();

Map> groupByDaypart = mapDateTypeValue.stream().filter(e -> dayType.equals(e.getDateTypeCode())).collect(Collectors.groupingBy(e -> fetchGroupKeyDaypart(mapKey, dayType, e)));

两层map转化

 Map>> productStrikeoutPriceTierMap = new HashMap<>(PcmConstants.HASH_MAP_SIZE);
 List  productStrikeoutPrices =  productStrikeoutPriceMapper.selectListByProductStrikeout(productDetailStrikeoutAll,demissionCategory.getDataVersion());
                if (null != productStrikeoutPrices && productStrikeoutPrices.size() > 0) {
                    productStrikeoutPriceTierMap = productStrikeoutPrices.stream().collect(Collectors.groupingBy(ProductStrikeoutPrice::getProductCode, Collectors.groupingBy(ProductStrikeoutPrice::getPriceTierCode)));
                }

 2,多层分类,map套map //按照模板分类所有维度--list中的元素是map---即可对map分类---list分类自动变成map----多个map间按照key合并

flatMap对集合进行抽出部分的裁剪,当每次抽出的是list用flagMap,否则用map
Map m1 = new HashMap<>();
    m1.put("A", 1l);
    m1.put("B", 100l);

    Map m2 = new HashMap<>();
    m2.put("A", 10l);
    m2.put("B", 20l);
    m2.put("C", 100l);

    List> beforeFormatting = new ArrayList<>();
    beforeFormatting.add(m1);
    beforeFormatting.add(m2);


        Map>> resultDimensionMap = beforeFormatting.stream()
                .flatMap(x -> x.entrySet().stream())  //---这里转化成map的遍历
                .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())));//用map的操作方法
                list分类自动变为map


                3,map转list
HashMap map = new HashMap<>();
        map.put("mayun",2000);
        map.put("mahuateng",1200);
        map.put("liuqiangdong",700);
        List collect = map.entrySet().stream().map(en -> new Account(en.getKey(), en.getValue())).collect(Collectors.toList());
        collect.stream().forEach(n-> System.out.println(n));
        

//用这中去重方法空key会报错空指针变成""用的时候在去掉""即可
         List categorTagDetailAllDis = categoryDetailAlls.stream().filter(distinctByKey(p -> (p.getTagCode() == null ? "" : p.getTagCode())))
                                                .collect(Collectors.toList());
                                                
                                                public static Predicate distinctByKey(Function keyExtractor) {
        Map map = new ConcurrentHashMap<>();
        return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }

你可能感兴趣的:(stream 分类变成多层map)