• stream 分组(group)和map的值映射mapping变型写法


    参考这个流映射写的:

    stream 分组(group)和map的值映射mapping 

    我们经常写那种分组查询的操作:根据某个id,分组聚合成Map<Long,List<String>> 类似这样的语法。

    发现一个for和别的组合在一起,比较好,单独的一个流操作n次,本来用for可以解决的问题,使用了多次的流操作,看着花里胡哨的,实际上性能并没有提升,反而下降了不少。

       public static void main(String[] args) {
    
            List<FloorElement> elementList=new ArrayList<>();
            FloorElement element=new FloorElement();
            element.setId(1l);
            element.setFloorId(1l);
            elementList.add(element);
            FloorElement element2=new FloorElement();
            element2.setId(2l);
            element2.setFloorId(1l);
            elementList.add(element2);
    
            Map<Long, List<FloorElement>> map = new HashMap<>();
            for (FloorElement value : elementList) {
                map.computeIfAbsent(value.getFloorId(), k -> new ArrayList<>()).add(value);
            }
       //打印的结果是两条数据,是分组的结果,根据id ,变种的写法
            elementList.stream() .collect(Collectors.groupingBy(FloorElement::getFloorId, Collectors.mapping(value->value, Collectors.toList())));
    
        }
    

      

     例子2:

    Map<Long, List<ProductDto>> productsMap = new HashMap<>();

    products.forEach(product -> {
    if (productsMap.containsKey(product.getPoId())) {
    productsMap.get(product.getPoId()).add(product);
    } else {
    List<ProductDto> productList = new ArrayList<>();
    productList.add(product);
    productsMap.put(product.getPoId(), productList);
    }
    });

    上面的操作按照流的惯例:
    Map<Long, List<ProductDto>> collect = products.stream().collect(Collectors.groupingBy(ProductDto::getPoId,
    Collectors.mapping(value -> value, Collectors.toList())));
  • 相关阅读:
    BZOJ4346 : [POI2016]Nadajniki
    BZOJ4345 : [POI2016]Korale
    BZOJ4134 : ljw和lzr的hack比赛
    BZOJ4342 : CF348 Pilgrims
    BZOJ2310 : ParkII
    BZOJ3322 : [Scoi2013]摩托车交易
    BZOJ1444 : [Jsoi2009]有趣的游戏
    Xcode8中处理打印日志的配置
    iOS开发之记录用户登录状态
    热修复
  • 原文地址:https://www.cnblogs.com/q1359720840/p/15811972.html
Copyright © 2020-2023  润新知