数据结构 现有多个对象,存储每个租户的视频/音频/图片大小,对象结构如下 登录后复制 public class TBucketSize { private Long tenantId; private Long imgSize; private Long audioSize; private Long videoSize; } 1.2.3.4.5.6. 租户数据如下: 登录后复制 TBucketSize tBucketSize1=new TBucketSize(); tBucketSize1.setTenantId(1L); tBucketSize1.setAudioSize(1L); tBucketSize1.setVideoSize(0L); tBucketSize1.setImgSize(0L); TBucketSize tBucketSize2=new TBucketSize(); tBucketSize2.setTenantId(1L); tBucketSize2.setVideoSize(1L); tBucketSize2.setAudioSize(1L); tBucketSize2.setImgSize(2L); TBucketSize tBucketSize3=new TBucketSize(); tBucketSize3.setTenantId(2L); tBucketSize3.setImgSize(1L); tBucketSize3.setAudioSize(0L); tBucketSize3.setVideoSize(0L); TBucketSize tBucketSize4=new TBucketSize(); tBucketSize4.setTenantId(2L); tBucketSize4.setImgSize(1L); tBucketSize4.setAudioSize(3L); tBucketSize4.setVideoSize(1L); List<TBucketSize> bucketSizes= Arrays.asList(tBucketSize1,tBucketSize2,tBucketSize3,tBucketSize4); 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24. 需求 要求统计每个租户 视频/音频/图片用量 java stream lambda计算写法: 登录后复制 bucketSizes.stream().collect(Collectors.toMap(TBucketSize::getTenantId, Function.identity(), (u1, u2) -> { u1.setImgSize(u1.getImgSize() + u2.getImgSize()); u1.setVideoSize(u1.getVideoSize() + u2.getVideoSize()); u1.setAudioSize(u1.getAudioSize() + u2.getAudioSize()); return u1; })).forEach((k, v) -> System.out.println(k+"-->"+ JSON.toJSON(v))); 1.2.3.4.5.6. 输出结果 登录后复制 1-->{"audioSize":2,"imgSize":2,"isDelete":0,"videoSize":1,"tenantId":1} 2-->{"audioSize":3,"imgSize":2,"isDelete":0,"videoSize":1,"tenantId":2} 1.2. 原创作者: u_4937244 转载于: https://blog.51cto.com/u_4937244/11567167