Улучшить оператор if в цикле через Hashmap - PullRequest
1 голос
/ 13 октября 2019

Я создал цикл, который проходит через мой HashMap. Затем я проверяю, совпадает ли имя текущего ключа (A) с ключом, который может быть добавлен (B). Хеш-коды ключа A и ключа B не обязательно равны, когда их имена. Поэтому я проверяю, равны ли они, преобразовывая их в строку (с переопределением .equals ()). Код работает, но в большинстве случаев есть более чистый и простой способ сделать это.

Это мой текущий код:

for (HashMap.Entry<Identifier, SetInterface<BigInteger>> entry : idAndSet.entrySet()) {
    if (entry.getKey().isEqual(identifier)) {
        factor = entry.getValue();
        return factor;
    }  
}

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Хэш-коды ключа A и ключа B не обязательно равны, когда их имена.

Это не очень хорошая идея. Любой класс, который действует как ключ, должен переопределить equals и hashCode. И было бы неплохо сделать класс также неизменяемым (в противном случае вы можете столкнуться с какой-то сложной отладкой).

Как только вы это сделаете, вы можете просто сделать


   Map<Indentifer, Object> map...;
   Object value = map.get(id);

   // or as of Java 8+

   Object value = map.getorDefault(id, someDefaultValue);

0 голосов
/ 13 октября 2019

Вы можете неправильно использовать метод Map.computeIfPresent.

factor = map.computeIfPresent(identifier, (k,v) -> v);
return factor;

Метод возвращает значение, связанное с указанным ключом, или ноль, если его нет

...