JDK1.8系列文章
- JDK1.8新特性(一):Lambda表达式
- JDK1.8新特性(二):Optional 类
- JDK1.8新特性(三):Stream
- JDK1.8新特性(四):Maps
- JDK1.8新特性(五):新的日期时间 API
之前有提到,Maps 类型不支持 streams,Map 接口本身没有stream()方法,您可以通过map.keyset ().stream()
、map.values().stream()
和 map.entryset ().stream()
来在映射的键、值或条目上创建专门的流。
此外,maps 支持用于执行常见任务的各种新方法。
Map<Integer, String> map = new HashMap<>();
for (int i = 0; i < 10; i++) {
map.putIfAbsent(i, "val" + i);
}
map.forEach((id, val) -> System.out.println(val));
上面的代码能够通过 putIfAbsent 明确的检查,防止我们写入空值。forEach 接受一个消费者对 map 的每个值执行操作。
这个例子展示了如何在 map 中计算:
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
接下来,我们来看如何删除一个键为 3、值为 val3、的键值对:
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 中。
公众号
如果大家想要第一时间看到我更新的 Java 方向学习文章,可以关注一下公众号【Lucas的咖啡店】。所有学习文章公众号首发,请各位大大扫码关注一下哦!
Java 8 新特性学习视频请关注公众号,私信【Java8】即可免费无套路获取学习视频。
网友评论