Java 8中一些常用的全新的函数式接口(3)


map.computeIfPresent(3, (num, val) -> val + num);
map.get(3);            // val33
 
map.computeIfPresent(9, (num, val) -> null);
map.containsKey(9);    // false

map.computeIfAbsent(23, num -> "val" + num);
map.containsKey(23);    // true

map.computeIfAbsent(3, num -> "bam");
map.get(3);            // val33

接下来展示如何在Map里删除一个键值全都匹配的项:

代码如下:

map.remove(3, "val3");
map.get(3);            // val33
 
map.remove(3, "val33");
map.get(3);            // null

另外一个有用的方法:

代码如下:
map.getOrDefault(42, "not found");  // not found

对Map的元素做合并也变得很容易了:

代码如下:
map.merge(9, "val9", (value, newValue) -> value.concat(newValue));
map.get(9);            // val9
 
map.merge(9, "concat", (value, newValue) -> value.concat(newValue));
map.get(9);            // val9concat

Merge做的事情是如果键名不存在则插入,否则则对原键对应的值做合并操作并重新插入到map中。

函数式接口的出现,是Java8对于Lambda表达式的一种支持。

Lambda表达式之进化 

个人推荐对于这些全新的学习方法:从官方文档出发,最好从java.util.stream里开始看,因为这里的大多数接口都会在流的操作中使用的到,官方文档里面给出了一些简短但有效的例子,结合文档的解释,能很好的理解这些全新的接口。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cb31eb935e454151f060728e228cc210.html