我有嵌套列表,我正在嘗試使用java流和收集器進(jìn)行分組和求和以獲得所需的結(jié)果。有了這個(gè),我無(wú)法循環(huán)訪問(wèn)多個(gè).要么我必須使用for循環(huán),要么使用其他一些邏輯。我想實(shí)現(xiàn)使用流 API。有沒(méi)有可能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 ;}我正在嘗試在地圖中獲得如下結(jié)果?;旧?,對(duì)于每個(gè)子帳戶,我需要在帳戶級(jí)別對(duì)資產(chǎn)進(jìn)行分組,如下所示1 - 332 - 383 - 47
1 回答

紅糖糍粑
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
您必須使用兩個(gè)平面地圖,
以便按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 你的代碼是一個(gè) String,所以 map 的鍵應(yīng)該是一個(gè) String,或者你必須轉(zhuǎn)換它,或者在你的類中更改它,就像這樣: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 ) ));
筆記
不要在類的名稱中使用復(fù)數(shù);
不要將變量命名為 ,請(qǐng)使用另一個(gè)重要名稱;
list
不要用作屬性的名稱,而應(yīng)僅使用
assetId
id
;不要在變量名稱中使用 List,而應(yīng)在末尾使用,例如 或 。
assetList
s
assets
accounts
添加回答
舉報(bào)
0/150
提交
取消