返回

揭开Java8 Map集合put()、compute()和getOrDefault()新方法的面纱

后端

引言:Java8 Map集合的新成员

随着Java8的发布,Map集合迎来了三名新成员:put()、compute()和getOrDefault()方法。这些方法的加入,不仅丰富了Map集合的功能,也为Java开发人员提供了更加灵活和便捷的操作方式。本文将一一介绍这三个方法,并通过示例演示它们的用法。

一、put()与putIfAbsent():在Map中添加元素

  1. put()方法:

    put()方法用于在Map中添加一个键值对。如果Map中已经存在该键,则会替换原有值并返回旧值;如果不存在,则添加新的键值对并返回null。

    Map<String, Integer> map = new HashMap<>();
    
    // 添加键值对
    map.put("Apple", 10);
    map.put("Orange", 20);
    
    // 获取并打印旧值
    Integer oldValue = map.put("Apple", 30);
    System.out.println("Old value for 'Apple': " + oldValue); // 输出:10
    
    // 打印Map中的所有键值对
    System.out.println(map); // 输出:{Apple=30, Orange=20}
    
  2. putIfAbsent()方法:

    putIfAbsent()方法与put()方法类似,但它只会在Map中不存在该键时才添加键值对。如果Map中已经存在该键,则不会做任何操作并返回原有值。

    Map<String, Integer> map = new HashMap<>();
    
    // 尝试添加键值对
    Integer result = map.putIfAbsent("Apple", 10);
    
    // 检查添加结果
    if (result == null) {
        System.out.println("New key-value pair added.");
    } else {
        System.out.println("Key already exists.");
    }
    
    // 打印Map中的所有键值对
    System.out.println(map); // 输出:{Apple=10}
    

二、compute()与computeIfAbsent():计算并更新元素

  1. compute()方法:

    compute()方法用于计算并更新Map中的一个键值对。它接收两个参数:键和一个Function对象。Function对象负责计算新的值。如果Map中存在该键,则使用Function对象计算新的值并替换原有值;如果不存在,则使用Function对象计算新的值并添加新的键值对。

    Map<String, Integer> map = new HashMap<>();
    
    // 使用compute()方法计算并更新值
    Integer newValue = map.compute("Apple", (key, value) -> {
        if (value == null) {
            return 10; // 初始值
        } else {
            return value + 5; // 增加5
        }
    });
    
    // 打印更新后的值
    System.out.println("Updated value for 'Apple': " + newValue); // 输出:10
    
    // 打印Map中的所有键值对
    System.out.println(map); // 输出:{Apple=10}
    
  2. computeIfAbsent()方法:

    computeIfAbsent()方法与compute()方法类似,但它只会在Map中不存在该键时才计算并添加新的键值对。如果Map中已经存在该键,则不会做任何操作并返回原有值。

    Map<String, Integer> map = new HashMap<>();
    
    // 使用computeIfAbsent()方法计算并添加值
    Integer result = map.computeIfAbsent("Apple", key -> {
        return 10; // 初始值
    });
    
    // 检查添加结果
    if (result == null) {
        System.out.println("New key-value pair added.");
    } else {
        System.out.println("Key already exists.");
    }
    
    // 打印Map中的所有键值对
    System.out.println(map); // 输出:{Apple=10}
    

三、getOrDefault():获取值或默认值

getOrDefault()方法用于获取Map中的一个键所对应的值。如果Map中存在该键,则返回该键所对应的值;如果不存在,则返回一个默认值。

Map<String, Integer> map = new HashMap<>();

// 使用getOrDefault()方法获取值或默认值
Integer value = map.getOrDefault("Apple", 0);

// 打印获取到的值
System.out.println("Value for 'Apple': " + value); // 输出:0

// 添加键值对
map.put("Apple", 10);

// 再次使用getOrDefault()方法获取值或默认值
value = map.getOrDefault("Apple", 0);

// 打印获取到的值
System.out.println("Value for 'Apple': " + value); // 输出:10

结语:Java8 Map集合的新利器

put()、compute()和getOrDefault()方法的加入,为Java8 Map集合带来了更加强大的功能和更加灵活的用法。它们不仅简化了编程任务,也提高了开发效率。希望本文能帮助您更深入地理解这三个新方法,并将其应用到实际项目中。