名稱 | 說明 |
---|---|
Object compute(Object key, BiFunction remappingFunction) | 該方法使用 remappingFunction 根據原 key-value 對計算一個新 value。只要新 value 不為 null,就使用新 value 覆蓋原 value;如果原 value 不為 null,但新 value 為 null,則刪除原 key-value 對;如果原 value、新 value 同時為 null,那麼該方法不改變任何 key-value 對,直接返回 null。 |
Object computeIfAbsent(Object key, Function mappingFunction) | 如果傳給該方法的 key 引數在 Map 中對應的 value 為 null,則使用 mappingFunction 根據 key 計算一個新的結果,如果計算結果不為 null,則用計算結果覆蓋原有的 value。如果原 Map 原來不包括該 key,那麼該方法可能會新增一組 key-value 對。 |
Object computeIfPresent(Object key, BiFunction remappingFunction) | 如果傳給該方法的 key 引數在 Map 中對應的 value 不為 null,該方法將使用 remappingFunction 根據原 key、value 計算一個新的結果,如果計算結果不為 null,則使用該結果覆蓋原來的 value;如果計算結果為 null,則刪除原 key-value 對。 |
void forEach(BiConsumer action) | 該方法是 Java 8 為 Map 新增的一個遍歷 key-value 對的方法,通過該方法可以更簡潔地遍歷 Map 的 key-value 對。 |
Object getOrDefault(Object key, V defaultValue) | 獲取指定 key 對應的 value。如果該 key 不存在,則返回 defaultValue。 |
Object merge(Object key, Object value, BiFunction remappingFunction) | 該方法會先根據 key 引數獲取該 Map 中對應的 value。如果獲取的 value 為 null,則直接用傳入的 value 覆蓋原有的 value(在這種情況下,可能要新增一組 key-value 對);如果獲取的 value 不為 null,則使用 remappingFunction 函數根據原 value、新 value 計算一個新的結果,並用得到的結果去覆蓋原有的 value。 |
Object putIfAbsent(Object key, Object value) | 該方法會自動檢測指定 key 對應的 value 是否為 null,如果該 key 對應的 value 為 null,該方法將會用新 value 代替原來的 null 值。 |
Object replace(Object key, Object value) | 將 Map 中指定 key 對應的 value 替換成新 value。與傳統 put() 方法不同的是,該方法不可能新增新的 key-value 對。如果嘗試替換的 key 在原 Map 中不存在,該方法不會新增 key-value 對,而是返回 null。 |
boolean replace(K key, V oldValue, V newValue) | 將 Map 中指定 key-value 對的原 value 替換成新 value。如果在 Map 中找到指定的 key-value 對,則執行替換並返回 true,否則返回 false。 |
replaceAll(BiFunction function) | 該方法使用 BiFunction 對原 key-value 對執行計算,並將計算結果作為該 key-value 對的 value 值。 |
public class MapTest { public static void main(String[] args) { Map map = new HashMap(); // 成對放入多個key-value對 map.put("Java入門教學", 10); map.put("C語言入門教學", 20); map.put("Python基礎教學", 30); // 嘗試替換key為”Go語言入門教學”的 value,由於原 Map 中沒有對應的 key // 因此Map沒有改變,不會新增新的key-value對 map.replace("Go語言入門教學", 40); System.out.println(map); // 使用原value與傳入引數計算出來的結果覆蓋原有的value map.merge("C語言入門教學", 25, (oldVal, param) -> (Integer) oldVal + (Integer) param); System.out.println(map); // 當key為"Java"對應的value為null (或不存在)時,使用計算的結果作為新value map.computeIfAbsent("Java", (key) -> ((String) key).length()); System.out.println(map); // map 中新增了 Java=4 這組 key-value 對 // 當key為"Java"對應的value存在時,使用計算的結果作為新value map.computeIfPresent("Java", (key, value) -> (Integer) value * (Integer) value); System.out.println(map); // map 中 Java=4 變成 Java=16 } }輸出結果為:
{Java入門教學=10, Python基礎教學=30, C語言入門教學=20}
{Java入門教學=10, Python基礎教學=30, C語言入門教學=45}
{Java=4, Java入門教學=10, Python基礎教學=30, C語言入門教學=45}
{Java=16, Java入門教學=10, Python基礎教學=30, C語言入門教學=45}