• lambda表达式学习例子


     https://www.cnblogs.com/franson-2016/p/5593080.html

    https://www.cnblogs.com/fx-blog/p/11745205.html

    实例表达式说明 

    将仓库数据,以id为key,仓库数据为value

    Map<Long, WareHouseDTO> warehouseMap = warehouseAllList.stream().collect(Collectors.toMap(WareHouseDTO::getId, t1 -> t1));//不提倡,除非key是数据库主 键

    这里的key必须唯一,不然会报错,如果报错是脏数据引起,最好用下面这个

     

    有顺序的MAP

    Map<Long, TQmsTemplateInspectionItems> newItemsMap = insertInspectionItemsList.stream().collect(Collectors.toMap(TQmsTemplateInspectionItems::getInspectionItemsCode, Function.identity(), (t1, t2) -> t1,LinkedHashMap::new));
       

    有可能脏数据引起某些key不唯一,则需要选择一条作为value

    Map<Long, WareHouseDTO> cityWarehouseMap = warehouseAllList.stream().collect(Collectors.toMap(WareHouseDTO::getWarehouseId, Function.identity(), (t1, t2) -> t1));

    一般选择这种作为key->value,防止key不唯一

     

    如果要抽取某个list的某个字段作为list

    List<Long> cityWarehouseIdList = supplierSiWarehouseList.stream().map(SupplierSiWarehouse::getfWarehouse).distinct().collect(Collectors.toList());

    如果要对数据去重,则用distinct进行去重处理

     

    有可能会抽取满足条件的作为key->value数据

    List<WareHouseDTO> warehouseDTOList = warehouseAllList.stream().filter(x -> cityWarehouseIdList.contains(x.getWarehouseId())).collect(Collectors.toList());

     在filter中可以进行各种筛选,比如包含,是否相等,大于等于等等

     

     有时候不是一一个字段作为key,有可能是多个字段

    Map<String, EtlOrderItemSku> etlOrderItemSkuMap = etlOrderItemSkuList.stream().filter(t1 ->warehouseMap.containsKey(t1.getWarehouseId())).collect(

    Collectors.toMap(t1 -> warehouseMap.get(t1.getWarehouseId()).getWarehouseId() + "_" + t1.getSkuId(), Function.identity(), (t1, t2) -> t1));

    注意,多个字段为key,最好拼接成字符串,如果key都是数字,会对数字加和做key,有可能会出错

     

    有可能list中的作为key的字段的类型不是我们想要的,可以转换

     saleasIdList = salesAreaList.stream().filter(s -> param.getWarehouseId().equals(s.getWarehouse_id())).map(t -> Integer.parseInt(t.getId() + "")).distinct().collect(Collectors.toList());

    举例中将long转换成integer,也可以是其他转换

     

    有时候要处理的是一个map,要将map中long型的抽取成一个integer的list

    List<Integer> skuIds = supplierPriceMap.keySet().stream().map(t1 -> t1.intValue()).collect(Collectors.toList());

    这里简单的将map的key抽取成set然后再对每个key做转换,然后输出成list

     

    有时候,我们需要将几个数字,做成一个list集合,但是一个个塞,不仅繁琐,而且low

    List<Integer> protypeList = Arrays.stream("3,4,12".split(",")).map(n -> Integer.valueOf(n)).collect(Collectors.toList());

    先用Arrays数组转stream,然后将参数以字符串分隔,这样就是一个list,然后对这个list做lambda处理

     

    有很多场景,一个list中的要做key的字段不唯一,并且业务场景出现

    Map<Integer, List<UpsEnginePromotionResDTO>> listSkuMap = upsEnginePromotionResDTOList.stream().collect(Collectors.groupingBy(UpsEnginePromotionResDTO::getSkuId));

    这样每一个key会对应不止一个value

     

    有顺序的分组Map

    Map<Long, List<TQmsTemplateCaseInspectionItems>> oldCaseItemsListMap = oldItemsList.stream().collect(Collectors.groupingBy(TQmsTemplateCaseInspectionItems::getInspectionItemsCode,LinkedHashMap::new,Collectors.toList()));
       

    如果要对一个list以一个字段进行升级排序,比如1,升序,2降序,则使用jdk封装好的Comparator.comparing

    Collections.sort(promotionReferenceToStockList, Comparator.comparing(t -> t.getForecastSales() * (sortType - 1.5)));

    ForecastSales是要比对的字段,sortType有可能是1或者2,则,在这里减去1.5之后,得出(sortType - 1.5)的正负性,进行排序,Comparator.comparing里面也是lambda实现的:

     public static <T, U extends Comparable<? super U>> Comparator<T> comparing( Function<? super T, ? extends U> keyExtractor) { Objects.requireNonNull(keyExtractor); return (Comparator<T> & Serializable) (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2)); }
     

    分组取bean中的一个字段为list

    Map<Integer, List<Integer>> listSkuMap1 = upsEnginePromotionResDTOList.stream().collect(Collectors.groupingBy(UpsEnginePromotionResDTO

    ::getSkuId, Collectors.mapping(UpsEnginePromotionResDTO::getCustomDailyLimit,Collectors.toList())));

    以一个重复字段为key,取出bean中的一个字段为value

     

    取出一个字段对应的另一个字段


    Map<Long, Long> salesAreaToWarehouseId =salesAreaList.stream().collect(Collectors.toMap(SalesArea::getId,SalesArea::getWarehouse_id , (t1, t2) -> t1));

     比如例子,以仓售卖区id换仓库id

     

    加和一个list的某个字段

    instockList.stream().filter(t1 -> t1.getfProcurementItem().equals(pOrderAdjustSWebResDTO.getfProcurementItem())).collect(Collectors.summingLong(ProcurementOrderInstockDTO::getNum))

    比如要加和某个poi多次入库的重量

     
  • 相关阅读:
    git简单介绍
    ssh常用操作
    gentoo emerge简单用法
    golang程序因未知错误崩溃时如何记录异常
    RPC实现原理(HSF、dubbo) 从头开始(一)
    websocket
    tmpfs小结
    CURL常用命令
    SVN命令详解
    3.Linux Shell流程控制
  • 原文地址:https://www.cnblogs.com/lvgg/p/11344599.html
Copyright © 2020-2023  润新知