开发者社区 问答 正文

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

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

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

展开
收起
李博 bluemind 2019-04-24 15:43:16 13592 分享 版权
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
    赞同 展开评论
问答分类:
问答地址: