我有下面的地图,我想用费率图中的每个值除以率而不迭代每个条目并构建新的地图。是否可能?
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));
答案 0 :(得分:7)
有可能吗?
没有。此外,一开始并不清楚你应该使用地图。对于具有适当字段的Charge
类型,您几乎肯定会更好。 (这可能是4个字段,或者你可以从其他字段计算一些值。)
然后,您可以添加一个方法,将所有相关字段值除以常量,或者(更好的IMO)返回具有新值的类型的 new 实例(使{{ 1}}键入本身不可变的。)
答案 1 :(得分:3)
BigDecimal
是不可变的,因此您必须使用新实例替换地图中的值。但是,您不需要构建新地图(但您需要迭代):
final BigDecimal divisor = new BigDecimal(rate);
for (Entry<?, BigDecimal> e : charges.entrySet()) {
e.setValue(e.getValue().divide(divisor));
}
虽然我怀疑@JonSkeet在使用地图时是否正确;包含与地图键对应的字段的类似乎更合适。