3

私は以下のマップを持っています。各エントリを反復して新しいマップを構築することなく、料金マップの各値でレートを分割したいのですが、可能ですか?

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

2 に答える 2

3

BigDecimalは不変であるため、マップ内の値を新しいインスタンスに置き換える必要があります。ただし、新しいマップを作成する必要はありません (ただし、反復する必要があります)。

final BigDecimal divisor = new BigDecimal(rate);

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

@JonSkeetはマップの使用についてまったく正しいと思いますが。ここでは、マップのキーに対応するフィールドを含むクラスがより適切であるようです。

于 2013-08-22T14:44:56.370 に答える