我在地图下方,我想在收费地图中将费率除以每个值,而无需重复每个条目并构造新的地图。

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));

最佳答案

BigDecimal是不可变的,因此您必须用新实例替换映射中的值。但是,您不需要构造新的地图(但是您需要进行迭代):

final BigDecimal divisor = new BigDecimal(rate);

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

尽管我怀疑@JonSkeet对于使用地图完全正确;包含对应于地图键的字段的类在这里似乎更合适。

09-09 19:54
查看更多