HashMapPour mettre à jour une HashMap<K,V> efficacement (V non mutable) :
map.merge(key, 1, Interger::sum); // ou map.merge(key, 1, (x,y) -> x + y);
équivaut à :
map.compute(key,(k, v) -> {
if (v == null) {
return 1;
} else {
return v + 1;
}
});
HashMapAu pire, si vous n'y arrivez pas avec une lambda (V toujours non mutable):
var oldValue = map.get(key); // fait office d'appel à map.contains(key)
if (oldValue == null) {
oldValue = initialValue;
}
map.put(key, update(oldValue)); // update est un UnaryOperator<V>
Ou mieux :
var oldValue = map.getOrDefault(key, 0); map.put(key, update(oldValue)); // update est un UnaryOperator<V>
HashMapPour mettre à jour une HashMap<K,V> efficacement (V mutable):
HashMap<Long,Data> map = ... var data = map.computeIfAbsent<(key, k -> new Data()); data.update(newValue);
Par exemple :
HashMap<String,ArrayList<Integer>> map = ... map.computeIfAbsent(key, k -> new ArrayList<>()).add(1);