淺談Java8中map的新方法
淺談Java8中map的新方法

Map在java8中新增了兩個(gè)replace的方法
1.replace(k,v)
在指定的鍵已經(jīng)存在并且有與之相關(guān)的映射值時(shí)才會將指定的鍵映射到指定的值(新值)
在指定的鍵不存在時(shí),方法會return回來一個(gè)null
javadoc的注釋解釋了該默認(rèn)值方法的實(shí)現(xiàn)的等價(jià)Java代碼:
if (map.containsKey(key)) {
return map.put(key, value);
} else {
return null;
}
下面展示的是新方法和JDK8之前的方法比較:
/*
* 示范Map.replace(K, V)方法并和JDK8之前的實(shí)現(xiàn)方法做對比。JDK8
* 中新增的Map.replace(K, V)方法相比于傳統(tǒng)的實(shí)現(xiàn)方法,所用的代碼行數(shù)更少
* 并且允許用一個(gè)final類型iHqNXGmXWH的變量來接收返回值。
*/
// JDK8之前的實(shí)現(xiàn)方式
String replacedCapitalCity;
if (statesAndCapitals.containsKey("Alaska")) {
replacedCapitalCity = statesAndCapitals.put("Alaska", "Juneau");
}
// JDK8的實(shí)現(xiàn)方式
final String replacedJdk8City = statesAndCapitals.replace("Alaska", "Juneau");
2.replace(k,v,v)
第二的新增的Map replace方法在替換現(xiàn)存值方面有更窄的釋義范圍。當(dāng)那個(gè)方法(上一個(gè)replace方法)只是涵蓋指定的鍵在映射中有任意一個(gè)有效的值的替換處理,而這個(gè)“replace”方法接受一個(gè)額外的(第三個(gè))參數(shù),只有在指定的鍵和值都匹配的情況下才會替換。
javadoc注釋說明了該默認(rèn)值方法的實(shí)現(xiàn):
if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
map.put(key, newValue);
return true;
} else {
return false;
}
下面這段代碼列舉展示的是新實(shí)現(xiàn)方法和JDK8之前的實(shí)現(xiàn)方法的一個(gè)具體比較。
/*
* 示范Map.replace(K, V, V)方法并和JDK8之前的實(shí)現(xiàn)方法做對比。JDK8
* 中新增的Map.replace(K, V, V)方法相比于傳統(tǒng)的實(shí)現(xiàn)方法,所用的代碼行數(shù)更少
* 并且允許用一個(gè)final類型的變量來接收返回值。
*/
// JDK8之前的實(shí)現(xiàn)方式
boolean replaced = false;
if ( statesAndCapitals.containsKey("Nevada")
&& Objects.equals(statesAndCapitals.get("Nevada"), "Las Vegas")) {
statesAndCapitals.put("Nevada", "Carson City");
replaced = true;
}
// JDK8的實(shí)現(xiàn)方式
final boolean replacedJdk8 = statesAndCapitals.replace("Nevada", "Las Vegas", "Carson City");