java 8 new hashmap_java 8 hashMap新增方法

replace

把newValue替换oldValue.

replace(K key, V oldValue, V newValue) 判断oldValue是否正确

replace(K key, V value)

用map的put(相同的key)也能做到newValue替换oldValue,但是replace走的是get获取的流程,获取不到就直接返回false。-- replace 所在场景一般是key存在的

@Override

public boolean replace(K key, V oldValue, V newValue) {

Node e; V v;

if ((e = getNode(hash(key), key)) != null &&

((v = e.value) == oldValue || (v != null && v.equals(oldValue)))) {

e.value = newValue;

afterNodeAccess(e);

return true;

}

return false;

}

@Override

public V replace(K key, V value) {

Node e;

if ((e = getNode(hash(key), key)) != null) {

V oldValue = e.value;

e.value = value;

afterNodeAccess(e);

return oldValue;

}

return null;

}

getOrDefault (Object key, V defaultValue)

根据key获取value, 如果value为空则返回defaultValue

@Override

public V getOrDefault(Object key, V defaultValue) {

Node e;

return (e = getNode(hash(key), key)) == null ? defaultValue : e.value;

}

remove(Object key, Object value)

根据key和value 删除

@Override

public boolean remove(Object key, Object value) {

return removeNode(hash(key), key, value, true, true) != null;

}

computeIfAbsent(K key,Function super K, ? extends V> mappingFunction)

映射当key不存在或value为null时的value值,包括创建对应key,返回value,如果key存在,则不做处理,例:

Map map = new HashMap<>();

map.put("a",1);

int result = map.computeIfAbsent("a1", (v) -> 90);

System.out.println(map.get("a1"));

System.out.println(result);

int av = map.computeIfAbsent("a", (v) -> 90);

System.out.println(av);

结果:

90

90

1

computeIfPresent(K key, BiFunction super K, ? super V, ? extends V> remappingFunction)

与上述的computeIfAbsent 相反,当key存在时计算替换相应的value,并返回。当key不存在时报NPE,例:

Map map = new HashMap<>();

map.put("a",1);

int aValue = map.computeIfPresent("a" ,(k,v) -> 21 + v);

System.out.println(aValue);

结果:

21

compute(K key, BiFunction super K, ? super V, ? extends V> remappingFunction)

也是计算key的value,如果key不存在,则创建key并复制value,如果value为null,则报NPE,例:

Map map = new HashMap<>();

map.put("a",1);

int result = map.compute("a1", (k,v) -> 91);

System.out.println(map.get("a1"));

System.out.println(result);

int av = map.compute("a", (k,v) -> 92);

System.out.println(av);

int anull = map.compute("a", (k,v) -> null);

System.out.println(anull);

如果:

91

91

92

Exception in thread "main" java.lang.NullPointerException

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

合并map

value 为null 报NPE

如果key存在,且value 不为null,新,老value根据计算得出结果,赋值给key。

如果key不存在,且value 不为null,value赋值给key。

Map map = new HashMap<>();

map.put("a",1);

map.merge("a", 21,(a,b) -> a + b);

System.out.println(map.get("a"));

map.merge("a1", 22,(a,b) -> a + b);

System.out.println(map.get("a1"));

map.merge("a2", null,(a,b) -> a + b);

System.out.println(map.get("a2"));

结果:

22

22

Exception in thread "main" java.lang.NullPointerException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值