我有一个包含大量常量列表的枚举。我在这里显示两个常量数据。
public enum PaymentType implements BaseEnum{
CASH(1, "Cash", "PaymentType.cash"),
CREDIT(2, "Credit Card", "PaymentType.credit");
现在我有一个付款数组。付款阵列有PaymentTypes。所以我想尝试使用Amount聚合PaymentType。将PaymentType与金额分组。我使用下面的代码,它正在工作。但是我有一个很大的常量列表,所以我不想写硬编码。我们能否拥有一个可以聚合它们的逻辑。
for(Payment pay:payments){
if(pay.getType().getCode() == PaymentType.CASH.getCode()){
totalCash += payment.getAmount();
} else
if(pay.getType().getCode() == PaymentType.CREDIT.getCode()){
totalCredit += payment.getAmount();
}
}
输出: -
Cash $500
Credit $1000
由于
答案 0 :(得分:0)
对于任意数量的分组,请使用TenantId
。在您的情况下,密钥是枚举,因此请使用Map
。
我认为金额是EnumMap
,因为BigDecimal
对于货币值(精确/舍入问题)来说是一个糟糕的选择。
double
您现在可以获得任何枚举的总数:
EnumMap<PaymentType, BigDecimal> totals = new EnumMap<>(PaymentType.class);
for (Payment payment : payments) {
BigDecimal total = totals.get(payment.getType());
total = (total == null ? payment.getAmount() : total.add(payment.getAmount()));
totals.put(payment.getType(), total);
}
如果未找到该类型的付款,则值为BigDecimal cashTotal = totals.get(PaymentType.CASH);
。如果您想要零值,请使用:
null
<强>更新强>
使用// Any Java version
BigDecimal cashTotal = totals.get(PaymentType.CASH);
if (cashTotal == null)
cashTotal = BigDecimal.ZERO;
// Java 8+
BigDecimal cashTotal = totals.getOrDefault(PaymentType.CASH, BigDecimal.ZERO);
非常相似:
double