我有嵌套列表,我正在尝试使用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
不要用作属性的名称,而应仅使用
assetId
id
;不要在变量名称中使用 List,而应在末尾使用,例如 或 。
assetList
s
assets
accounts
添加回答
举报
0/150
提交
取消