Sobes.tech
Middle

Jaka jest różnica między metodami put a compute?

sobes.tech AI

Odpowiedź od AI

put(key, value) po prostu kojarzy value z key, zastępując istniejącą wartość, jeśli klucz już istnieje.

compute(key, remappingFunction) oblicza nową wartość dla key za pomocą dostarczonej funkcji remappingFunction. Funkcja przyjmuje aktualny klucz i jego bieżącą wartość (lub null, jeśli klucz nie istnieje) i zwraca nową wartość, która zostanie powiązana z kluczem. Jeśli funkcja zwraca null, wpis jest usuwany.

Główne różnice:

  • Obsługa brakujących kluczy: put wstawia nową wartość. compute może używać poprzedniej wartości (nawet null) do obliczenia nowej.
  • Zależność od poprzedniej wartości: put ustawia wartość niezależnie od poprzedniej. compute wyraźnie korzysta z poprzedniej wartości w funkcji obliczeniowej.
  • Usuwanie wpisów: put(key, null) usuwa wpis. compute usuwa wpis, jeśli funkcja obliczeniowa zwraca null.

Przykład użycia:

// Użycie put
Map<String, Integer> countsPut = new HashMap<>();
countsPut.put("apple", 1);
countsPut.put("apple", 2); // Zastąpi 1 na 2

// Użycie compute do inkrementacji licznika
Map<String, Integer> countsCompute = new HashMap<>();
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana będzie 1
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana będzie 2
countsCompute.compute("cherry", (key, value) -> null); // Usunie cherry, jeśli istniał