按照组合键分类
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;
}