开发者社区> 问答> 正文

stream如何实现分组后,多个字段分别求和?

比如user对象,我用性别分组,怎么即算出年龄总和,又算出身高总和

本问题来自云栖社区【阿里Java技术进阶2群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。

展开
收起
李博 bluemind 2019-04-24 15:43:16 13461 0
2 条回答
写回答
取消 提交回答
  • 推荐回答

    参考如下假例代码,请修改再实现:

            List<UserDTO> users = userMapper.getUserAllListFromDb();
            Map<Integer, List<UserDTO>> mapList = users.stream().collect(Collectors.groupingBy(UserDTO::getGender));
            List<UserDTO> manUserList = mapList.get("1"); //假设代表男
            BigDecimal ageTotal = manUserList.stream().map(UserDTO::getAge).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
            BigDecimal lengthTotal = manUserList.stream().map(UserDTO::getLength).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
            System.out.println("总年龄:" + ageTotal);
            System.out.println("总身高:" + lengthTotal);
    
    2019-09-04 16:54:20
    赞同 展开评论 打赏
  • 可以做一个 computeIfAbsent

    2019-07-17 23:34:11
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RowKey与索引设计:技巧与案例分析 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载