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多次入库的重量

 

lambda表达式学习例子的更多相关文章

  1. C# Lambda 表达式学习之(三):动态构建类似于 c => c.Age == null || c.Age > 18 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  2. C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  3. java 8 中lambda表达式学习

    转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...

  4. C# Lambda表达式学习笔记

    本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用.     一.Lambda ...

  5. Lambda 表达式 学习

    最近几天在学习Lambda,给我的理解就是一个匿名函数的升级版,代码极大可能的简洁了很多,不需要像以前一样必须使用众多的代码才能实现相关功能. 慢慢积累学习,将Java 8的相关知识进行一个学习. 用 ...

  6. java lambda表达式学习笔记

    lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...

  7. Python中lambda表达式学习

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

  8. C++11 lambda表达式学习

    lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...

  9. Lambda表达式学习记录

    Lambda表达式可以简化C#编程的某些方面,用法非常灵活.因此也不容易掌握. 下边是我学Lambda表达式的一点记录. 1.Lambda表达式是与委托紧密联系的.只要有委托参数类型的地方,就可以使用 ...

随机推荐

  1. composer 国内加速,修改镜像源

    为什么慢 由于默认情况下执行 composer 各种命令是去国外的 composer 官方镜像源获取需要安装的具体软件信息,所以在不使用代理.不翻墙的情况下,从国内访问国外服务器的速度相对比较慢 如何 ...

  2. 移动H5优化指南

    转载于http://isux.tencent.com/h5-performance.html 移动H5前端性能优化指南 概述 秒完成或使用Loading4. 基于联通3G网络平均338KB/s(2.7 ...

  3. 关于日历实现代码里lunarInfo(农历)数组

    var lunarInfo=new Array( 0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x0 ...

  4. Html5 学习笔记 --》css3 学习

    在开发任务中最好不要使用前缀 可以设置发散图形 圆形 方形等 边框图片效果: CSS3 变形效果: Css3 3D立体变形: css 设置 CSS3 过度效果: div:hover { backgro ...

  5. python post 发送字符串

    python post 发送一段字符串 把字符串写在表单里,表单用字典格式,字符串作value import requests data={key:str} r=requests.post(url,d ...

  6. 关于Java序列化你应该知道的一切

    什么是序列化 我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术. Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数 ...

  7. 分布式系统架构常识:CAP理论。

    什么是CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后麻省理工学院的Seth Gilbert和NancyLynch从理论上证明 ...

  8. python基础--二分查找

    # 二分查找 def sort_search(lst,key): """ 二分查找 :param lst: 有序数列 :param key: 要查找的关键值 :retur ...

  9. redis 入门之集合

    sadd 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略.假如 key 不存在,则创建一个只包含 member 元素作成员的集合.当 key 不 ...

  10. 【学习总结】Python-3- 类型判断之 isinstance 和 type 的区别

    菜鸟教程-Python3-基本数据类型 关于类型查询: type() 函数:可以用来查询变量所指的对象类型 用 isinstance()函数:判断是否是某个类型 两者的区别: type()不会认为子类 ...