stream 分类变成多层map

这篇博客探讨了Java集合框架的使用,包括List、Map的转换与分类操作。通过Stream API实现了多层分类,例如将产品按代码和价格层级分组。此外,还展示了如何将Map转换为List,并提供了去重方法。示例代码涵盖了Map与List之间的转换,以及对Map内部元素的扁平化处理。
摘要由CSDN通过智能技术生成

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

List<TemplateDimension> mapDateTypeValue = dateType.getValue();

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

两层map转化

 Map<String, Map<String, List<ProductStrikeoutPrice>>> productStrikeoutPriceTierMap = new HashMap<>(PcmConstants.HASH_MAP_SIZE);
 List<ProductStrikeoutPrice>  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<TemplateUsed, TemplateDimension> m1 = new HashMap<>();
    m1.put("A", 1l);
    m1.put("B", 100l);

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

    List<Map<TemplateUsed, TemplateDimension>> beforeFormatting = new ArrayList<>();
    beforeFormatting.add(m1);
    beforeFormatting.add(m2);


        Map<TemplateUsed, List<Map<TemplateDimension, TemplateDimension>>> 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<String, Integer> map = new HashMap<>();
        map.put("mayun",2000);
        map.put("mahuateng",1200);
        map.put("liuqiangdong",700);
        List<Account> 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<CategoryDetailAllVO> categorTagDetailAllDis = categoryDetailAlls.stream().filter(distinctByKey(p -> (p.getTagCode() == null ? "" : p.getTagCode())))
                                                .collect(Collectors.toList());
                                                
                                                public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
        Map<Object, Boolean> map = new ConcurrentHashMap<>();
        return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值