Sobes.tech
Middle

Каква е разликата между методите put и compute?

sobes.tech AI

Отговор от AI

put(key, value) просто асоциира value с key, заменяйки съществуващата стойност, ако ключът вече съществува.

compute(key, remappingFunction) изчислява нова стойност за key, използвайки предоставената функция remappingFunction. Функцията приема текущия ключ и неговата текуща стойност (или null, ако ключът не съществува) и връща нова стойност, която ще бъде свързана с ключа. Ако функцията върне null, записът се премахва.

Основни разлики:

  • Обработка на липсващи ключове: put вмъква нова стойност. compute може да използва предишната стойност (дори null) за изчисление.
  • Зависимост от предишната стойност: put задава стойността независимо от предишната. compute явно използва предишната стойност във функцията за изчисление.
  • Премахване на записи: put(key, null) премахва записа. compute премахва записа, ако функцията за изчисление върне null.

Пример за използване:

// Използване на put
Map<String, Integer> countsPut = new HashMap<>();
countsPut.put("apple", 1);
countsPut.put("apple", 2); // Заменя 1 с 2

// Използване на compute за инкрементиране на брояч
Map<String, Integer> countsCompute = new HashMap<>();
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana ще бъде 1
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana ще бъде 2
countsCompute.compute("cherry", (key, value) -> null); // Премахва cherry, ако съществува