Назад к вопросам
Middle
68
questionbank

В чем отличие между методами put и compute?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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, если он был