HashMap值计算没有迭代

时间:2013-08-22 14:38:28

标签: java

我有下面的地图,我想用费率图中的每个值除以率而不迭代每个条目并构建新的地图。是否可能?

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

2 个答案:

答案 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在使用地图时是否正确;包含与地图键对应的字段的类似乎更合适。