попробуйте ввести код:
>>> d2 = dict([('one',1), ('two', 2), ('three', 3)])
>>> d2
{'three': 3, 'two': 2, 'one': 1}
В 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);
Может быть, есть более лямбда-методы, о которых я не знаю.
Прежде всего: будьте внимательны при распаковке: temp относится к типу Integer. Но операция ++ реализована для int. Так что temp распакован, чтобы набрать int. Это означает, что если temp равен null, вы запускаете исключение NullPointerException.
И вы должны сделать это так, как вы распознали в первом блоке кода.
Просто для полноты в 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();