Я предлагаю вам сначала взглянуть на ответ Майка , чтобы получить представление о том, как решить эту проблему, а затем внести некоторые изменения в предоставленный им код, чтобы он работал в вашей ситуации:
import java.util.HashMap;
public class InstrumentedHashMap<K> extends HashMap<K, Float> {
private static final long serialVersionUID = 1L;
private int MAX;
public InstrumentedHashMap(int capacity) {
super();
MAX = capacity;
}
@Override
public Float put(K key, Float value) {
if (super.size() >= MAX && !super.containsKey(key)) {
return null;
} else {
super.put(key, value);
return value;
}
}
public void event(K trigger, int multiplyAmount, float subtractAmount) {
super.entrySet().stream().forEach(e -> {
if (!e.getKey().equals(trigger))
e.setValue(e.getValue() * multiplyAmount);
else
e.setValue(e.getValue() - subtractAmount);
});
}
}
Вы можете использовать метод InstrumentedHashMap#event
для обработки вашего "конкретного события", с параметром multiplyAmount
, являющимся значением, на которое вы хотите умножить число с плавающей запятой.