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:
putwstawia nową wartość.computemoże używać poprzedniej wartości (nawetnull) do obliczenia nowej. - Zależność od poprzedniej wartości:
putustawia wartość niezależnie od poprzedniej.computewyraźnie korzysta z poprzedniej wartości w funkcji obliczeniowej. - Usuwanie wpisów:
put(key, null)usuwa wpis.computeusuwa wpis, jeśli funkcja obliczeniowa zwracanull.
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ł