集合框架Map接口
1.8 Map接口的新方法:
在JDK8中Map接口提供了一些新的便利的方法。因为在本文中我所提到的所有Map方法都是以默认值方法的方式实现的,所以现有的Map接口的实现可以直接拥有这些在默认值方法中定义的默认行为,而不需要新增一行代码。
getOrDefault(Object, V)
putIfAbsent(K,V)
remove(Object key, Object value)
replace(K,V)
replace(K,V,V)
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
package com.vince;
import java.util.HashMap;
import java.util.Map;
/**
* Map接口1.8新增方法介绍
* @author vince
* @description
*/
public class MapNewMethodDemo {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(1, "jack");
map.put(2, "tom");
map.put(3, "lily");
String value = map.getOrDefault(4, "null");
System.out.println(value);
// String s = map.get(5);
// if(s==null){
// System.out.println();
// }else{
//
// }
//
// String val = map.put(3,"vince");
// System.out.println(val);
//只会添加不存在相同key的值
// String val = map.putIfAbsent(3, "vince");
// System.out.println(val);
// map.forEach((k,v)->System.out.println(k+"->"+v));
//根据键和值都匹配时才删除
// map.remove(1, "jack");
// map.replace(3, "vince");
// map.replace(3, "lily", "vince");
//map.compute(1, (k,v1)->v1+"1");
// map.computeIfAbsent(5,(val)->val+"test");
map.merge(8, "888", (oldVal,newVal)->oldVal.concat(newVal));
map.forEach((k,v)->System.out.println(k+"->"+v));
}
}
map.getOrDefault()
之前没有getOrDefault方法时 取值还要判断一下是否为空 现在就不用了 直接取值
要是为空 返回我们给它的默认值
map.put
直接使用put 如果key已经存在 则key不变 value值会覆盖掉
这里返回的是val之前的value值
但是map.putIfAbsent() 如果value值已存在 则不会更新 不会让你填进去
这个方法 只会添加不存在相同key的值
remove()
键值不匹配 不会执行删除操作
键值匹配 才会执行删除操作
map.replace(3, “vince”); 替换操作 根据key替换value
map.replace(3, “lily”, “vince”); 替换操作 但只有原来的value匹配 才会替换
compute计算
computeIfAbsent
如果为空的话 会操作 不为空 不操作
merge合并
key存在 原来的值会加上
不存在就会直接创建