Map在Java 8中增加非常实用哪些函数接口?
阅读本文大概需要 5.5 分钟。
来自:网络
Map中的新方法
forEach()
// Java7以及之前迭代Map
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
for(Map.Entryentry : map.entrySet()){
System.out.println(entry.getKey() + "=" + entry.getValue());
}
// 使用forEach()结合匿名内部类迭代Map
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.forEach(new BiConsumer(){
@Override
public void accept(Integer k, String v){
System.out.println(k + "=" + v);
}
});
// 使用forEach()结合Lambda表达式迭代Map
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.forEach((k, v) -> System.out.println(k + "=" + v));
}
getOrDefault()
// 查询Map中指定的值,不存在时使用默认值
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
// Java7以及之前做法
if(map.containsKey(4)){ // 1
System.out.println(map.get(4));
}else{
System.out.println("NoValue");
}
// Java8使用Map.getOrDefault()
System.out.println(map.getOrDefault(4, "NoValue")); // 2
remove()
replace()
replace(K key, V value),只有在当前Map中key的映射存在时才用value去替换原来的值,否则什么也不做. replace(K key, V oldValue, V newValue),只有在当前Map中key的映射存在且等于oldValue时才用newValue去替换原来的值,否则什么也不做.
// Java7以及之前替换所有Map中所有映射关系
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
for(Map.Entryentry : map.entrySet()){
entry.setValue(entry.getValue().toUpperCase());
}
// 使用replaceAll()结合匿名内部类实现
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.replaceAll(new BiFunction(){
@Override
public String apply(Integer k, String v){
return v.toUpperCase();
}
});
// 使用replaceAll()结合Lambda表达式实现
HashMapmap = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.replaceAll((k, v) -> v.toUpperCase());
merge()
如果Map中key对应的映射不存在或者为null,则将value(不能是null)关联到key上; 否则执行remappingFunction,如果执行结果非null则用该结果跟key关联,否则在Map中删除key的映射.
map.merge(key, newMsg, (v1, v2) -> v1+v2);
compute()
map.compute(key, (k,v) -> v==null ? newMsg : v.concat(newMsg));
computeIfAbsent()
Map
> map = new HashMap<>();
// Java7及以前的实现方式
if(map.containsKey(1)){
map.get(1).add("one");
}else{
SetvalueSet = new HashSet ();
valueSet.add("one");
map.put(1, valueSet);
}
// Java8的实现方式
map.computeIfAbsent(1, v -> new HashSet()).add("yi");
computeIfPresent()
// Java7及以前跟computeIfPresent()等效的代码
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);
return newValue;
}
return null;
推荐阅读:
微信扫描二维码,关注我的公众号
朕已阅