在Java8里,Map类型不支持stream,不过Map提供了一些新的有用的方法来处理一些日常任务。
getOrDefault
如果指定的key存在,则返回该key对应的value;
如果不存在,则返回指定的值;
System.out.println(map.getOrDefault("d","ddd"));
// key为d不存在,输出ddd
forEach
forEach接收一个BiConsumer接口(lambda表达式)来对map里的每一个键值对进行操作,BiConsumer接口的两个参数依次为key和val。
map.forEach((id, val) -> System.out.println(val));
put
不管存不存在key,都设值。
返回旧值,如果没有则返回null。
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.put("b","v");
System.out.println(v);// 输出 B
String v1 = map.put("c","v");
System.out.println(v1); // 输出:NULL
compute
相当于put,只不过返回的是新值;
当key不存在时,执行value计算方法,计算value;
Map<String, String> map = new HashMap<>();
map.put("a", "A");
map.put("b", "B");
String val = map.compute("b", (k, v) -> "v");
System.out.println(val);// 输出 v
String v1 = map.compute("c", (k, v) -> "v");
System.out.println(v1);// 输出 v
putIfAbsent
putIfAbsent返回旧值,如果没有则返回null;
先计算value,再判断key是否存在;
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.putIfAbsent("b","v");
System.out.println(v); // 输出 B
String v1 = map.putIfAbsent("c","v");
System.out.println(v1); // 输出 null
System.out.println(JSON.toJSON(map));
// 输出 {"a":"A","b":"B","c":"v"}
computeIfAbsent
存在时返回存在的值,不存在时返回新值;
参数为:key,Function<key,value>(value计算方法);
当key不存在时,执行value计算方法,计算value;
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.computeIfAbsent("b",k->"v");
System.out.println(v);// 输出 B
String v1 = map.computeIfAbsent("c",k->"v");
System.out.println(v1); // 输出 v
System.out.println(JSON.toJSON(map));
// 输出 {"a":"A","b":"B","c":"v"}
computeIfPresent
如果指定的key存在,则根据旧的key和value计算新的值newValue;
如果newValue不为null,则设置key新的值为newValue;
如果newValue为null, 则删除该key的值;
key存在,返回新值,不存在,返回Null;
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
map.put("c","C");
String v = map.computeIfPresent("b",(key, value)->null);
System.out.println(v);// 输出 null
String v1 = map.computeIfPresent("c",(key, value)->"v");
System.out.println(v1); // 输出 v
String v2 = map.computeIfPresent("d",(key, value)->"d");
System.out.println(v2); // 输出 null
System.out.println(JSON.toJSON(map));
// 输出 {"a":"A","c":"v"}
replace(K key, V value)
如果map中存在key,则替换成value值,否则返回null;
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.replace("b","b");
System.out.println(v);// 输出 B
String v1 = map.replace("c","c");
System.out.println(v1); // 输出 null
System.out.println(JSON.toJSON(map));
// 输出 {"a":"A","b":"b"}
replace(K key, V oldValue, V newValue)
如果key关联的值与指定的oldValue的值相等,则替换成新的newValue返回true,否则不替换返回false;
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
Boolean v = map.replace("a","a","aa");
System.out.println(v);// 输出 false
Boolean v1 = map.replace("b","B","BB");
System.out.println(v1);// 输出 true
Boolean v2 = map.replace("c","c","C");
System.out.println(v2); // 输出 false
Boolean v3 = map.replace("d",null,"D");
System.out.println(v3); // 输出 false
System.out.println(JSON.toJSON(map));
// 输出 {"a":"A","b":"BB"}
replaceAll
替换Map中所有Entry的value值,这个值由旧的key和value计算得出,
接收参数 (K, V) -> V;
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
map.put("c","C");
map.replaceAll((k,v)->k+v);
System.out.println(JSON.toJSON(map));
// 输出 {"a":"aA","b":"bB","c":"cC"}
remove
接收2个参数,key和value,如果key关联的value值与指定的value值相等(equals),则删除这个元素;
网友评论