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多次入库的重量 | 
lambda表达式学习例子的更多相关文章
- C# Lambda 表达式学习之(三):动态构建类似于 c => c.Age == null || c.Age > 18 的表达式
		可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ... 
- C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 ||  c => c.Age == 17 等等一个或多个 OrElse  的表达式
		可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ... 
- java 8 中lambda表达式学习
		转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ... 
- C# Lambda表达式学习笔记
		本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用. 一.Lambda ... 
- Lambda 表达式 学习
		最近几天在学习Lambda,给我的理解就是一个匿名函数的升级版,代码极大可能的简洁了很多,不需要像以前一样必须使用众多的代码才能实现相关功能. 慢慢积累学习,将Java 8的相关知识进行一个学习. 用 ... 
- java lambda表达式学习笔记
		lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ... 
- Python中lambda表达式学习
		lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ... 
- C++11 lambda表达式学习
		lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ... 
- Lambda表达式学习记录
		Lambda表达式可以简化C#编程的某些方面,用法非常灵活.因此也不容易掌握. 下边是我学Lambda表达式的一点记录. 1.Lambda表达式是与委托紧密联系的.只要有委托参数类型的地方,就可以使用 ... 
随机推荐
- 数据挖掘之DecisionTreeClassifier决策树
			用决策树DecisionTreeClassifier的数据挖掘算法来通过三个参数,Pclass,Sex,Age,三个参数来求取乘客的获救率. 分为三大步: 一,创建决策树DecisionTreeCla ... 
- 使用命令将ipa包上传到蒲公英
			参考:官文文档 请根据开发者自己的账号,将其中的 uKey 和 _api_key 的值替换为相应的值. curl -F "file=@/Users/chenpeisong/Desktop ... 
- Python 进阶_OOP 面向对象编程_类属性和方法
			目录 目录 类属性 调用类属性 查看类属性 特殊的类属性 类方法 真构造器 __new__ 类属性 在理解类属性之前要先搞清楚 实例属性 和 函数属性 之间的区别: 1. 实例属性:指的是实例化类对象 ... 
- docker安装部署命令
			一.安装工具包 $ sudo yum install -y yum-utils #安装工具包,缺少这些依赖将无法完成 二.设置远程仓库 $sudo yum-config-manager --add-r ... 
- 洛谷P3366 【模板】最小生成树(LCT)
			[模板]最小生成树 题目传送门 解题思路 用LCT来维护最小生成树. 除了把各顶点作为节点外,每条边也都视为一个节点.对于要加入的边\(e\),检查其两顶点\(x\)和\(y\)是否在同一棵树中,如果 ... 
- css控制文本对齐
			h1 {text-align:center;} p.date {text-align:right;} p.main {text-align:justify;} text-decoration 属性用来 ... 
- leetcode.排序.347前k个高频元素-Java
			1. 具体题目 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums ... 
- JavaScript — event介绍以及兼容处理
			JavaScript - event介绍以及兼容处理 1.事件流 浏览器发展到第四代时(IE4及 Netscape Communicator 4),浏览器开发团队遇到一个问题:页面的哪个部分会拥有某个 ... 
- C中整数的溢出
			/** * 整数的溢出 */ #include <stdio.h> int main(int argc, char *argv[]) { short i = -24; // 将-24以无符 ... 
- Sql Server Management Studio 18 打开闪退问题
			解决方案 找到MSSMS安装位置,例如我是安装到了D:\Program Files (x86)\Microsoft SQL Server Management Studio 18 将D:\Progra ... 
