为了账号安全,请及时绑定邮箱和手机立即绑定

使用嵌套列表进行分组和求和

使用嵌套列表进行分组和求和

猛跑小猪 2022-09-01 16:41:10
我有嵌套列表,我正在尝试使用java流和收集器进行分组和求和以获得所需的结果。有了这个,我无法循环访问多个.要么我必须使用for循环,要么使用其他一些逻辑。我想实现使用流 API。有没有可能SubAccountsMap<Long, BigDecimal> assetQuanMap = subAccounts.getAssets.parallelStream().collect(Collectors.groupingBy(Asset::getAssetId, Collectors.reducing(BigDecimal.ZERO, Asset::getQuantity, BigDecimal::add)));我有以下课程或表示:    Account        SubAccount1            Assets                1 - 20                2 - 30                3 - 40        SubAccount2            Assets                1 - 10                2 - 5                3 - 3        SubAccount3                1 - 3                2 - 3                3 - 4帐户类如下所示:Public class Account{  List<SubAccounts> list;}Public Class SubAccounts    {   List<Assets> list;}Public class Assets{    Long assetId;    BigDecimal quantity ;}我正在尝试在地图中获得如下结果。基本上,对于每个子帐户,我需要在帐户级别对资产进行分组,如下所示1 - 332 - 383 - 47
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

您必须使用两个平面地图,以便按assetId

Map<String, BigDecimal> collect = accounts.stream()
        .flatMap(account -> account.getList().stream())
        .flatMap(subAccount -> subAccount.getList().stream())
        .collect(Collectors.groupingBy(Assets::getAssetId,
                Collectors.reducing(
                        BigDecimal.ZERO, 
                        Assets::getQuantity,
                        BigDecimal::add)
        ));

from 你的代码是一个 String,所以 map 的键应该是一个 String,或者你必须转换它,或者在你的类中更改它,就像这样:assetId

Map<Long, BigDecimal> collect = accounts.stream()
        .flatMap(account -> account.getList().stream())
        .flatMap(subAccount -> subAccount.getList().stream())
        .collect(Collectors.groupingBy(asset -> Long.valueOf(asset.getAssetId()),
                Collectors.reducing(
                        BigDecimal.ZERO,
                        Assets::getQuantity,
                        BigDecimal::add
                )
        ));

笔记

  • 不要在类的名称中使用复数;

  • 不要将变量命名为 ,请使用另一个重要名称;list

  • 不要用作属性的名称,而应仅使用assetIdid;

  • 不要在变量名称中使用 List,而应在末尾使用,例如 或 。assetListsassetsaccounts


查看完整回答
反对 回复 2022-09-01
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信