mapreduce分组统计_使用JAVA8 stream中三个参数的reduce方法对List进行分组统计

本文介绍了如何利用JAVA8的Stream和reduce方法对数据进行分组统计,通过一个具体的例子展示了如何对List中的对象按名称分组并计算相关统计信息,如计数和类型值总和,同时对比了传统方法和新特性的效率差异。
摘要由CSDN通过智能技术生成

背景

平时在编写前端代码时,习惯使用lodash来编写‘野生’的JavaScript;

lodash提供来一套完整的API对JS对象(Array,Object,Collection等)进行操作,这其中就包括_.groupBy 和 _.reduce,即分组和'聚合'(reduce不知道该怎么翻译合适)。

使用这些‘野生’的API能够极大的提高我本人编写JS代码的效率。而JAVA8开始支持stream和lambda表达式,这些和lodash的API有很多类似的功能。因此我在熟悉lodash的前提下尝试使用JAVA8的新特性减少冗余代码的编写。

需求

在开发后端某功能接口的过程中,需要对一个从数据库中取出的数据List进行按照ID进行聚合统计

JAVA8 reduce API

API个人理解

U reduce(U u,BiFunction accumulator,BinaryOperator combiner)

#第一个参数返回实例u,传递你要返回的U类型对象的初始化实例u

#第二个参数累加器accumulator,可以使用二元ℷ表达式(即二元lambda表达式),声明你在u上累加你的数据来源t的逻辑

#例如(u,t)->u.sum(t),此时lambda表达式的行参列表是返回实例u和遍历的集合元素t,函数体是在u上累加t

#第三个参数组合器combiner,同样是二元ℷ表达式,(u,t)->u

#lambda表达式行参列表同样是(u,t),函数体返回的类型则要和第一个参数的类型保持一致

伪代码

#1.声明一个返回结果U

#2.对List进行遍历,在U和每个T实例上应用一个累加器进行累加操作

#3.返回最终结果U

U result = identity;

for (T element : this stream)

result = accumulator.apply(result, element)

return result;

数据准备

var source =

[

{"name": "A","type": "san","typeValue": 1.0,"count": 2},

{"name": "A","type": "nas","typeValue": 13.0,"count": 1},

{"name": "B","type": "san","typeValue": 112.0,"count": 3},

{"name": "C","type": "san","typeValue": 43.0,"count"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值