gpt4 book ai didi

Java流,如何GROUP BY并查找流的乘积

转载 作者:行者123 更新时间:2023-11-30 02:16:13 24 4
gpt4 key购买 nike

我有一个流,可以获取流中每个余额的“每日返回”,但我想获取每个 accountId 的所有每日返回的乘积。我知道我需要添加类似的内容:

.collect(Collectors.groupingBy(n -> n.getAccountId(), Collectors.reducing(BigDecimal.ZERO, BigDecimal::multiply)));

但是我不知道如何。这是到目前为止的流:

Map<Long, Double> solution = new HashMap<Long, Double>();

balances.stream()
.forEach(n -> {
if(n.getCashflow().compareTo(BigDecimal.ZERO) > 0) {
solution.put(n.getAccountId(), n.getEndingBalance().divide((n.getStartingBalance().add(n.getCashflow())), 6, RoundingMode.FLOOR).doubleValue());
}
else {
solution.put(n.getAccountId(), (n.getEndingBalance().subtract(n.getCashflow())).divide(n.getStartingBalance(), 6, RoundingMode.FLOOR).doubleValue());
}
});

请随时提出任何实现此解决方案的方法,谢谢!

最佳答案

为了更容易理解,我们将每日 yield 的计算与流分开:

Function<Balance, BigDecimal> dailyReturn = n -> {
if (...) {
return ...;
} else {
return ...;
}
}; // or use a ternary statement

现在我们可以使用 3 参数 toMap 收集器收集每个帐户的所有每日 yield 的乘积:

balances.stream().collect(Collectors.toMap(
Balance::getAccountId,
dailyReturn,
BigDecimal::multiply
));

关于Java流,如何GROUP BY并查找流的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48328338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com