Неизменные ключи - карта фиксированной длины в Java - PullRequest
0 голосов
/ 03 сентября 2018

Есть ли в Java способ создать коллекцию (карту) с фиксированным размером и длиной? То есть я хотел бы инициализировать его с помощью K постоянных ключей (например, строк), но все же хочу иметь возможность изменять значения.

Edit: Тестовый случай имеет фиксированное количество объектов, каждый из которых соответствует числу (float). Каждый раз, когда происходит конкретное событие в приложении, я хотел бы умножить все числа в коллекции, кроме числа, которое соответствует объекту, «вызвавшему» событие. Число не является логически атрибутирующим объектом.

1 Ответ

0 голосов
/ 03 сентября 2018

Я предлагаю вам сначала взглянуть на ответ Майка , чтобы получить представление о том, как решить эту проблему, а затем внести некоторые изменения в предоставленный им код, чтобы он работал в вашей ситуации:

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, являющимся значением, на которое вы хотите умножить число с плавающей запятой.

...