您的位置:

深入理解map.getOrDefault函数

一、简介

Map是一种常见的数据结构,它可以存储键值对。在Java中,Map的接口有多种实现方式,如HashMap、TreeMap、LinkedHashMap等。针对Map的接口,Java8提供了一个新的方法getOrDefault,其作用是在Map中根据给定的键查找对应的值,如果不存在,则返回默认值。

二、使用方法

getOrDefault方法的方法签名如下:

default V getOrDefault(Object key, V defaultValue)

其中key表示要查找的键,defaultValue表示默认值。如果key在Map中存在,则返回对应的值,否则返回defaultValue。

下面是getOrDefault的使用示例:

Map
    map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
int count1 = map.getOrDefault("apple", 0);
int count2 = map.getOrDefault("lemon", 0);
System.out.println(count1); // 输出1
System.out.println(count2); // 输出0
   

上述代码创建了一个存储String到Integer的HashMap对象,并向其中添加了两个元素。接着,使用getOrDefault方法分别获取了apple和lemon键对应的值,由于lemon键在Map中不存在,因此返回了默认值0。

三、代码示例1:计算数组元素的出现次数

现在有一个由正整数组成的数组,需要计算每个元素在数组中出现的次数。可以使用Map来实现该功能。具体地,可以遍历数组元素,将每个元素作为Map中的键,对应的值表示该元素出现的次数。为了保证初始值为0,可以在使用getOrDefault方法获取值时向其传递默认值0。

int[] nums = {1, 2, 3, 2, 1, 5, 3, 2, 4};
Map
    count = new HashMap<>();
for (int num : nums) {
    count.put(num, count.getOrDefault(num, 0) + 1);
}
System.out.println(count); // 输出{1=2, 2=3, 3=2, 4=1, 5=1}
   

上述代码使用了Map来统计nums数组中每个元素出现的次数。其中count初始化为空的HashMap对象。接着,遍历nums中的元素,将当前元素作为键,从count中获取对应的值,并加上1,再将键值对重新存储到count中。在使用getOrDefault方法时,将默认值设置为0。

四、代码示例2:将List转换成Map

假设有一个存储学生姓名和成绩的List,需要将其转换成Map对象。可以使用Map来实现该功能。具体地,可以遍历List中的元素(学生),将每个元素的姓名作为Map中的键,对应的值为元素的成绩。为了方便使用Map的put方法,可以使用Java8提供的stream和collect方法。

List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 90));
students.add(new Student("Bob", 80));
students.add(new Student("Charlie", 85));
Map<String, Integer> scores = students.stream().collect(Collectors.toMap(Student::getName, Student::getScore));
System.out.println(scores); // 输出{Alice=90, Bob=80, Charlie=85}

上述代码使用了Map来将存储学生信息的List转换成Map。其中,定义了一个Student类,其包含了成员变量name和score,并提供了相应的getter方法。在对List执行stream操作之后,利用toMap方法将元素的name作为键,score作为值转换成Map对象。

五、小结

本文详细介绍了Java8中Map接口提供的getOrDefault方法。该方法可以简化开发人员对Map对象的访问,同时提高代码的可读性和健壮性。本文还给出了两个getOrDefault方法的实际应用场景,将数组元素计数和将List转换成Map。相信读者通过阅读本文,对Map.getOrDefault方法已经有了更深入的认识。