Java8_map新增方法


參考博客

https://irusist.github.io/2016/01/04/Java-8%E4%B9%8BMap%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95/#getOrDefault-%E6%96%B9%E6%B3%95

default方法

map.put(1, "a");
map.put(2, "b");

getOrDefault方法

如果指定的key存在,返回value,不存在,返回指定的值

System.out.pringln(map.getOrDefaullt(4, "d"))

forEach方法

遍歷Map中的所有Entry, 對key, value進行處理

// 輸出1a, 2b, 3c
map.forEach((key, value) -> System.out.println(key + value));

replaceAll方法

替換Map中所有Entry的value值,這個值由舊的key和value計算得出,接收參數 (K, V) -> V, 類似如下代碼

map.replaceAll((key, value) -> (key + 1) + value);
// 輸出 12a 23b 34c
map.forEach((key, value) -> System.out.println(key + value));

putIfAbsent 方法

如果key關聯的value不存在,則關聯新的value值,返回key關聯的舊的值

相當於


V v = map.get(key);
if (v == null)
    v = map.put(key, value);

return v;

remove 方法

接收2個參數,key和value,如果key關聯的value值與指定的value值相等(equals),則刪除這個元素

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
    map.remove(key);
    return true;
} else
    return false;

replace(K key, V oldValue, V newValue) 方法

如果key關聯的值與指定的oldValue的值相等,則替換成新的newValue

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
    map.put(key, newValue);
    return true;
} else
    return false;

replace(K key, V value) 方法

if (map.containsKey(key)) {
    return map.put(key, value);
} else
    return null;

computeIfAbsent 方法

如果指定的key不存在,則通過指定的K -> V計算出新的值設置為key的值

if (map.get(key) == null) {
    V newValue = mappingFunction.apply(key);
    if (newValue != null)
        map.put(key, newValue);
}

栗子:

map.computeIfAbsent(1, key -> key + " computed");
// 存在key為1,則不進行計算,輸出值 a
System.out.println(map.get(1));

map.computeIfAbsent(4, key -> key + " computed");
// 不存在key為4,則進行計算,輸出值 4 computed
System.out.println(map.get(4));

computeIfPresent 方法

如果指定的key存在,則根據舊的key和value計算新的值newValue,
如果newValue不為null,則設置key新的值為newValue,
如果newValue為null,則刪除該key的值

if (map.get(key) != null) {
    V oldValue = map.get(key);
    V newValue = remappingFunction.apply(key, oldValue);
    if (newValue != null)
        map.put(key, newValue);
    else
        map.remove(key);
}

eg:

map.computeIfPresent(1, (key, value) -> (key + 1) + value);
// 存在key為1, 則根據舊的key和value計算新的值,輸出 2a
System.out.println(map.get(1));

map.computeIfPresent(2, (key, value) -> null);
// 存在key為2, 根據舊的key和value計算得到null,刪除該值,輸出 null
System.out.println(map.get(2));

merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) 方法

如果指定的key不存在,則設置指定的value值,
否則根據key的舊的值oldvalue,value計算出新的值newValue,
如果newValue為null,
則刪除該key,否則設置key的新值newValue。類似如下代碼

V oldValue = map.get(key);
V newValue = (oldValue == null) ? value :
        remappingFunction.apply(oldValue, value);
if (newValue == null)
    map.remove(key);
else
    map.put(key, newValue);

eg:

// 存在key為1, 輸出 a merge
System.out.println(map.merge(1, " merge", (oldValue, newValue) -> oldValue + newValue));
// 新值為null,刪除key,輸出 null
System.out.println(map.merge(1, " merge", (oldValue, newValue) -> null));
// 輸出 " merge"
System.out.println(map.merge(4, " merge", (oldValue, newValue) -> oldValue + newValue));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM