jdk8對Map新增了一些方法

# 簡介

jdk8對Map新增了一些方法,方便在不同的業(yè)務(wù)邏輯中使用

# 方法

## putIfAbsent

當(dāng)key對應(yīng)的value沒有時才放入新的值,可以防止舊值被覆蓋

```

default V putIfAbsent(K key, V value) {}

```

## computeIfAbsent

映射當(dāng)key不存在或value為null時的value值,包括創(chuàng)建對應(yīng)key,返回value,如果key存在,則不做處理

```

default V computeIfAbsent(K key,

? ? ? ? ? ? Function<? super K, ? extends V> mappingFunction) {}

```

## computeIfPresent

與上述的computeIfAbsent 相反,當(dāng)key存在時計算替換相應(yīng)的value,并返回。當(dāng)key不存在時返回null

```

default V computeIfPresent(K key,

? ? ? ? ? ? BiFunction<? super K, ? super V, ? extends V> remappingFunction) {}

```

## compute

計算key的value,如果key不存在,則創(chuàng)建key并賦值value,如果value為null,則報NPE

```

default V compute(K key,

? ? ? ? ? ? BiFunction<? super K, ? super V, ? extends V> remappingFunction) {}

```

## merge

- value 為null 報NPE

- 如果key存在,且value 不為null,新,老value根據(jù)計算得出結(jié)果,賦值給key。

- 如果key不存在,且value 不為null,value賦值給key。

```

default V merge(K key, V value,

? ? ? ? ? ? BiFunction<? super V, ? super V, ? extends V> remappingFunction) {}

```

## getOrDefault

如果key為空,就返回默認(rèn)值,否則返回value

```

default V getOrDefault(Object key, V defaultValue) {}

```

## replace

1. 可以判斷oldValue是否正確

```

default boolean replace(K key, V oldValue, V newValue) {}

```

2. 用map的put(相同的key)也能做到newValue替換oldValue,但是replace走的是get獲取的流程,獲取不到就直接返回false。 -- replace 所在場景一般是key存在的

```

default V replace(K key, V value) {}

```

## remove

1. 根據(jù)key和value移除,值不匹配將移除不成功

```

default boolean remove(Object key, Object value) {}

```

## forEach

遍歷map

```

default void forEach(BiConsumer<? super K, ? super V> action) {}

```

# 使用例子

```

Map<String, Integer> map = new HashMap<String, Integer>();

//初始化一些值

map.put("a", 1);

map.put("b",null);

map.put("c",3);

//當(dāng)key對應(yīng)的value沒有時才放入新的值,可以防止舊值被覆蓋

map.putIfAbsent("a", 2);

//映射當(dāng)key不存在或value為null時的value值,包括創(chuàng)建對應(yīng)key,返回value,如果key存在,則不做處理

map.computeIfAbsent("d", (v) -> 36);

//與上述的computeIfAbsent 相反,當(dāng)key存在時計算替換相應(yīng)的value,并返回。當(dāng)key不存在時返回null

Integer s = map.computeIfPresent("f", (k,v) -> v * 2);

//計算key的value,如果key不存在,則創(chuàng)建key并賦值value,如果value為null,則報NPE

map.compute("f", (k,v) -> 52);

//value 為null 報NPE

//如果key存在,且value 不為null,新,老value根據(jù)計算得出結(jié)果,賦值給key。

//如果key不存在,且value 不為null,value賦值給key。

map.merge("h", 2, (v1,v2) -> v1 + v2);

//如果key為空,就返回默認(rèn)值,否則返回value

Integer retV = map.getOrDefault("f", 12);

System.out.println(retV);

//替換? 可以判斷oldValue是否正確

map.replace("a", 2, 23);

//用map的put(相同的key)也能做到newValue替換oldValue,但是replace走的是get獲取的流程,獲取不到就直接返回false。

//-- replace 所在場景一般是key存在的

map.replace("b", 12);

//根據(jù)鍵值移除? 如果值不匹配 將移除不成功

map.remove("b",121);

//遍歷map

map.forEach((k,v) -> {

System.out.println("鍵:"+k+ "? 值:"+v);

});

```

# 總結(jié)

這里只是簡單的列了一下,還需要自己去體會和使用

[文章來源](https://blog.javafroum.cn/archives/jdk8%20Map%E6%96%B0%E5%A2%9E%E7%9A%84%E6%96%B9%E6%B3%95%E4%BB%8B%E7%BB%8D)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容