我在地图下方,我想在收费地图中将费率除以每个值,而无需重复每个条目并构造新的地图。
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对于使用地图完全正确;包含对应于地图键的字段的类在这里似乎更合适。