Lambda表达式之map reduce & groupingBy
来源:互联网 发布:linux环境下面安装字体 编辑:程序博客网 时间:2024/05/16 06:09
1. map & reduce
reduce操作可以实现从一组值中生成一个值。count、min、max方法,因为常用而被纳入到标准库中。事实上,这些方法都是reduce操作。
2. 使用收集器
前面使用过collect(toList())在流中生成Lst,但是有时人们还希望从流中生成其他集合(如:Set或Map),或者你希望定制一个类将你想要的东西抽象出来。
这就是“收集器”,只要将它传给collect方法,所有的流就都可以使用它了。收集器需要静态导入。
数据分组
collect(groupingBy())
注:这个方法和sql中的group by是类似的概念。
如下是一个使用 map, reduce 和 groupingBy的例子:
@Override public List<BillFee> getBillList(EnterpiseSubinstanceSearchCondition enterpiseSubinstanceSearchCondition) { log.debug("#######################################企业费用报告 - 企业账务信息sheet 开始####################################### enterpiseSubinstanceSearchCondition = {}", enterpiseSubinstanceSearchCondition); List<BillFee> billDetails = new ArrayList<>(); Date startTime = enterpiseSubinstanceSearchCondition.getStartTime(); Date endTime = enterpiseSubinstanceSearchCondition.getEndTime(); List<String> tenantIds = enterpiseSubinstanceSearchCondition.getIdList(); for(String tenantId : tenantIds){ DateTime startTimeDT = new DateTime(startTime); DateTime endTimeDT = new DateTime(endTime); int n = 0; while(true){ DateTime et = endTimeDT.minusMonths(n); // 以一个月为基本单位:结束时间 if(et.isBefore(startTimeDT)) break; n++; DateTime st = et.minusMonths(1).plusSeconds(1); // 以一个月为基本单位:开始时间 List<SubSubinstanceItem> subinstanceItems = findSubItemsByTenantId(tenantId); List<BillFee> subinstanceBillDetails = getSubBillList(subinstanceItems, new Date(st.getMillis()), new Date(et.getMillis())); if (subinstanceBillDetails != null) { Map<String, List<BillFee>> collect = subinstanceBillDetails.stream().collect(groupingBy(BillFee::getServiceTypeName)); List<BillFee> billFeeList = new ArrayList<>(); for(Map.Entry<String, List<BillFee>> entry : collect.entrySet()){ List<BillFee> billFees = entry.getValue(); BillFee billFee1 = billFees.get(0); billFee1.setTotalPrice(billFees.stream().map(BillFee::getTotalPrice).reduce(0.0d, MathHelper::add)); billFeeList.add(billFee1); } Collections.sort(billFeeList, (arg0, arg1) -> arg0.getOrgName().compareTo(arg1.getOrgName())); // 按部门升序 billDetails.addAll(billFeeList); } } } log.debug("#######################################企业费用报告 - 企业账务信息sheet 结束####################################### return = {}", billDetails); return billDetails; }
阅读全文
0 0
- Lambda表达式之map reduce & groupingBy
- lambda表达式,结合map、reduce、filter函数
- lambda表达式与filter()\map()\reduce()
- Python之filter、map、reduce、lambda
- Python函数式编程之lambda表达式,reduce函数、map函数、filter函数
- filter、map、reduce、lambda
- lambda(),map(),reduce(),filter()
- filter、map、reduce、lambda
- python的lambda表达式 内建函数filter map reduce
- python中的map,reduce,filter,sorted,lambda表达式
- Python特殊语法这之:filter、map、reduce、lambda
- python基础之(map, filter,reduce,lambda,global 变量)
- python filter lambda reduce map
- Python: lambda, map, reduce, filter
- Python filter、map、reduce、lambda
- Python:lambda、map、filter、reduce
- filter、map、reduce、lambda(Python)
- Python基础语法笔记--xrange()与range()的区别、map、filter、reduce分析、lambda表达式
- jsp页面的doGet()方法和doPost()方法
- 文章标题 动画Html
- 2017/9/28总结
- 【Python】2.x与3.x区别
- content-type
- Lambda表达式之map reduce & groupingBy
- 新人第一次用html做的页面
- 中国剩余定理
- ELM(extreme learning machine)
- php session与cookie的一些认识
- 链接
- SDL2入门教程(05_Optimized Surface Loading and Soft Stretching)
- (CodeForces
- MFC对话框控件的属性、方法、消息