compute
default V compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction)
對key的value進行操作, 最終 value 的值爲 lamda 表達式 remappingFunction 的執行結果
public class AnswerApp {
public static void main(String[] args) {
Map<String, String> map = Maps.newHashMap();
map.put("name", "answer");
map.put("address", "");
System.out.println("1->" +
map.compute("name",
(k, v) -> (v == null) ? "jaemon" : v));
System.out.println("2->" +
map.compute("sex",
(k, v) -> (v == null) ? "man" : v));
System.out.println("3->" +
map.compute("address",
(k, v) -> (StringUtils.isEmpty(v)) ? "sz" : v));
System.out.println(map);
}
}
程序運行結果
1->answer
2->man
3->sz
{address=sz, sex=man, name=answer}
putIfAbsent
default V putIfAbsent(K key, V value)
如果當前map中不存在 key, 則將value賦值給key, 如果 key存在, 則不進行任何操作
public class AnswerApp {
public static void main(String[] args) {
Map<String, String> map = Maps.newHashMap();
map.put("name", "answer");
map.put("address", "");
System.out.println("1->" + map.putIfAbsent("name", "jaemon"));
System.out.println("2->" + map.putIfAbsent("sex", "man"));
System.out.println("3->" + map.putIfAbsent("address", "sz"));
System.out.println(map);
}
}
程序運行結果
1->answer
2->null
3->
{address=, sex=man, name=answer}
computeIfAbsent
default V computeIfAbsent(K key,
Function<? super K, ? extends V> mappingFunction)
如果key不存在或對應的value爲null, 則使用 lamda 表達式 mappingFunction 函數的執行結果作爲value; 如果key存在,則不進行操作
public class AnswerApp {
public static void main(String[] args) {
Map<String, List<String>> map = Maps.newHashMap();
map.put("names", Lists.newArrayList("kobe"));
map.put("address", null);
System.out.println("1->" +
map.computeIfAbsent("names",
k -> Lists.newArrayList("answer")));
// key=address對應的value爲null, 使用lamda函數的執行結果作爲value
System.out.println("2->" +
map.computeIfAbsent("address",
k -> Lists.newArrayList("sz")));
// key=books不存在, 使用lamda函數的執行結果作爲value
System.out.println("3->" +
map.computeIfAbsent("books",
k -> Lists.newArrayList()));
System.out.println(map);
}
}
程序運行結果
1->[kobe]
2->[sz]
3->[]
{books=[], names=[kobe], address=[sz]}
computeIfPresent
default V computeIfPresent(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction)
如果key存在,則將lamda表達式 remappingFunction 的執行結果作爲value替換舊的value值; 如果key不存在或存在但對應的value爲null, 則不進行任何操作
public class AnswerApp {
public static void main(String[] args) {
Map<String, List<String>> map = Maps.newHashMap();
map.put("names", Lists.newArrayList("kobe"));
map.put("sex", null);
map.put("books", Lists.newArrayList("java"));
// 如果存在 key, 則將key對應的value替換爲指定的value值
System.out.println("1->" +
map.computeIfPresent("names",
(k, v) -> Lists.newArrayList("answer", "jaemon")));
// 不存在key爲address的鍵值對, 因此下面語句不會對map哈希集有影響
System.out.println("2->" +
map.computeIfPresent("address",
(k, v) -> Lists.newArrayList("sz")));
System.out.println("3->" +
map.computeIfPresent("sex",
(k, v) -> Lists.newArrayList("man")));
List<String> rlt = map.computeIfPresent("books", (k, v) -> {
List<String> result = Lists.newArrayList();
result.addAll(v);
result.add("Spring");
return result;
});
System.out.println("4->" + rlt);
System.out.println(map);
}
}
程序運行結果
1->[answer, jaemon]
2->null
3->null
4->[java, Spring]
{names=[answer, jaemon], books=[java, Spring], sex=null}
merge
default V merge(K key, V value,
BiFunction<? super V, ? super V, ? extends V> remappingFunction)
如果key不存在, 則將value賦值給key, 否則執行 remappingFunction 函數並將函數執行結果賦值給key
public class AnswerApp {
public static void main(String[] args) {
Map<String, List<String>> map = Maps.newHashMap();
map.put("names", Lists.newArrayList("kobe"));
ArrayList<String> myNames = Lists.newArrayList("answer", "jaemon");
// 如果 key存在, 則執行lamda表達式中的規則(參數 newVal 爲 myNames 的值)
List<String> names = map.merge("names", myNames,
(oldVal, newVal) -> {
oldVal.addAll(newVal);
return oldVal;
});
System.out.println("names=" + names);
ArrayList<String> myBooks = Lists.newArrayList("Java", "MySQL");
// 如果key=books不存在或對應的value爲null, 則將 myBooks 值賦值給 books
List<String> books = map.merge("books", myBooks,
(oldVal, newVal) -> {
newVal.addAll(oldVal);
return newVal;
});
System.out.println("books=" + books);
System.out.println(map);
}
}
程序運行結果
names=[kobe, answer, jaemon]
books=[Java, MySQL]
{books=[Java, MySQL], names=[kobe, answer, jaemon]}