没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
JAVA8 stream中三个参数的中三个参数的reduce方法对方法对List进行分组统计进行分组统计
操作操作
主要介绍了JAVA8 stream中三个参数的reduce方法对List进行分组统计操作,具有很好的参考价值,希望对大
家有所帮助。一起跟随小编过来看看吧
背景背景
平时在编写前端代码时,习惯使用lodash来编写‘野生'的JavaScript;
lodash提供来一套完整的API对JS对象(Array,Object,Collection等)进行操作,这其中就包括_.groupBy 和 _.reduce,即分组
和'聚合'(reduce不知道该怎么翻译合适)。
使用这些‘野生'的API能够极大的提高我本人编写JS代码的效率。而JAVA8开始支持stream和lambda表达式,这些和lodash的
API有很多类似的功能。因此我在熟悉lodash的前提下尝试使用JAVA8的新特性减少冗余代码的编写。
需求需求
在开发后端某功能接口的过程中,需要对一个从数据库中取出的数据List<T>进行按照ID进行聚合统计
JAVA8 reduce API
API个人理解个人理解
<U> U reduce(U u,BiFunction<U,? super T,U> accumulator,BinaryOperator<U> 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<T>进行遍历,在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": 5},
{"name": "B","type": "nas","typeValue": 77.0,"count": 7}
];
var target =
[
{
"name": "A",
"count": 3,
"totalTypeValue": 14.0,
"bazList": [
{
"type": "san",
"typeValue": 1.0
},
{
"type": "nas"
"typeValue": 13.0
}
]
},
{
"name": "B",
"count": 10,
"totalTypeValue": 189.0,
"bazList": [
{
"type": "san",
weixin_38516190
- 粉丝: 8
- 资源: 896
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页