簡體   English   中英

HashMap值計算沒有迭代

[英]HashMap values calculation without iterating

我有下面的地圖,我想用費用地圖中的每個值除以率而不迭代每個條目並構建新的地圖。這可能嗎?

final String rate="2";
Map<String,BigDecimal> charges=new HashMap<String,BigDecimal>();
charges.put("tax", new BigDecimal(22));
charges.put("vat", new BigDecimal(200));
charges.put("gross", new BigDecimal(100));
charges.put("principal", new BigDecimal(150));

分裂后

charges.put("tax", new BigDecimal(11));
charges.put("vat", new BigDecimal(100));
charges.put("gross", new BigDecimal(50));
charges.put("principal", new BigDecimal(75));

可能嗎?

不可以。此外,您一開始並不清楚應該使用地圖。 使用適當字段的Charge類型幾乎肯定會更好。 (這可能是4個字段,或者你可以從其他字段計算一些值。)

然后,您可以添加一個方法,將所有相關字段值除以常量,或者(更好的IMO)返回具有新值的類型的實例(使Charge類型本身不可變)。

BigDecimal是不可變的,因此您必須使用新實例替換映射中的值。 但是,您不需要構建新映射(但您需要迭代):

final BigDecimal divisor = new BigDecimal(rate);

for (Entry<?, BigDecimal> e : charges.entrySet()) {
    e.setValue(e.getValue().divide(divisor));
}

雖然我懷疑@JonSkeet在使用地圖方面是正確的; 包含與地圖鍵對應的字段的類似乎更合適。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM