jdk8對Map新增了一些方法

簡介

jdk8對Map新增了一些方法,方便在不同的業務邏輯中使用

方法

putIfAbsent

當key對應的value沒有時才放入新的值,可以防止舊值被覆蓋

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

computeIfAbsent

映射當key不存在或value爲null時的value值,包括創建對應key,返回value,如果key存在,則不做處理

default V computeIfAbsent(K key,
            Function<? super K, ? extends V> mappingFunction) {}

computeIfPresent

與上述的computeIfAbsent 相反,當key存在時計算替換相應的value,並返回。當key不存在時返回null

default V computeIfPresent(K key,
            BiFunction<? super K, ? super V, ? extends V> remappingFunction) {}

compute

計算key的value,如果key不存在,則創建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根據計算得出結果,賦值給key。
  • 如果key不存在,且value 不爲null,value賦值給key。
default V merge(K key, V value,
            BiFunction<? super V, ? super V, ? extends V> remappingFunction) {}

getOrDefault

如果key爲空,就返回默認值,否則返回value

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

replace

  1. 可以判斷oldValue是否正確
 default boolean replace(K key, V oldValue, V newValue) {}
  1. 用map的put(相同的key)也能做到newValue替換oldValue,但是replace走的是get獲取的流程,獲取不到就直接返回false。 – replace 所在場景一般是key存在的
default V replace(K key, V value) {}

remove

  1. 根據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);

//當key對應的value沒有時才放入新的值,可以防止舊值被覆蓋
map.putIfAbsent("a", 2);

//映射當key不存在或value爲null時的value值,包括創建對應key,返回value,如果key存在,則不做處理
map.computeIfAbsent("d", (v) -> 36);

//與上述的computeIfAbsent 相反,當key存在時計算替換相應的value,並返回。當key不存在時返回null
Integer s = map.computeIfPresent("f", (k,v) -> v * 2);

//計算key的value,如果key不存在,則創建key並賦值value,如果value爲null,則報NPE
map.compute("f", (k,v) -> 52);

//value 爲null 報NPE
//如果key存在,且value 不爲null,新,老value根據計算得出結果,賦值給key。
//如果key不存在,且value 不爲null,value賦值給key。
map.merge("h", 2, (v1,v2) -> v1 + v2);

//如果key爲空,就返回默認值,否則返回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);

//根據鍵值移除  如果值不匹配 將移除不成功
map.remove("b",121);

//遍歷map
map.forEach((k,v) -> {
System.out.println("鍵:"+k+ "  值:"+v);
});

總結

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

文章來源:程序軒

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章