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

我有嵌套列表,我正在尝试使用java流和收集器进行分组和求和以获得所需的结果。有了这个,我无法循环访问多个.要么我必须使用for循环,要么使用其他一些逻辑。我想实现使用流 API。有没有可能SubAccounts


Map<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 - 33

2 - 38

3 - 47


猛跑小猪
浏览 145回答 1
1回答

红糖糍粑

您必须使用两个平面地图,以便按assetIdMap<String,&nbsp;BigDecimal>&nbsp;collect&nbsp;=&nbsp;accounts.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(account&nbsp;->&nbsp;account.getList().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(subAccount&nbsp;->&nbsp;subAccount.getList().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(Assets::getAssetId, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.reducing( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal.ZERO,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assets::getQuantity, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal::add) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));from 你的代码是一个 String,所以 map 的键应该是一个 String,或者你必须转换它,或者在你的类中更改它,就像这样:assetIdMap<Long,&nbsp;BigDecimal>&nbsp;collect&nbsp;=&nbsp;accounts.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(account&nbsp;->&nbsp;account.getList().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.flatMap(subAccount&nbsp;->&nbsp;subAccount.getList().stream()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(asset&nbsp;->&nbsp;Long.valueOf(asset.getAssetId()), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.reducing( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal.ZERO, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assets::getQuantity, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal::add &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;));笔记不要在类的名称中使用复数;不要将变量命名为 ,请使用另一个重要名称;list不要用作属性的名称,而应仅使用assetIdid;不要在变量名称中使用 List,而应在末尾使用,例如 或 。assetListsassetsaccounts
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java