Увеличение целого числа в HashMap

попробуйте ввести код:

  >>> d2 = dict([('one',1), ('two', 2), ('three', 3)])
  >>> d2
      {'three': 3, 'two': 2, 'one': 1}
28
задан NimChimpsky 25 November 2010 в 13:08
поделиться

3 ответа

В Java 8 есть новые методы в Map, которые вы можете использовать с лямбдами для решения этой проблемы. Первый вариант, compute :

a.compute(key, (k, v) -> v+1);

Обратите внимание, что это работает только в том случае, если хэш инициализируется для всех возможных ключей.

Если это не гарантировано, вы можете изменить приведенный выше код на:

a.compute(key, (k, v) -> v == null ? 1 : v + 1);

Или использовать метод merge (который я бы предпочел):

a.merge(key, 1, (a, b) -> a + b);

Может быть, есть более лямбда-методы, о которых я не знаю.

19
ответ дан Lii 25 November 2010 в 13:08
поделиться

Прежде всего: будьте внимательны при распаковке: temp относится к типу Integer. Но операция ++ реализована для int. Так что temp распакован, чтобы набрать int. Это означает, что если temp равен null, вы запускаете исключение NullPointerException.

И вы должны сделать это так, как вы распознали в первом блоке кода.

0
ответ дан scheffield 25 November 2010 в 13:08
поделиться

Просто для полноты в Java 8 есть longAdder, который дает некоторые преимущества по сравнению с AtomicInteger ( http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic /LongAdder.html)

final Map<WhatEver, LongAdder> result = new HashMap<>();
result.get(WhatEver).increment();
0
ответ дан Markus Schreiber 25 November 2010 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: