JDK1.8新特性(四):Maps

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 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】即可免费无套路获取学习视频。

你可能感兴趣的:(JDK1.8新特性(四):Maps)