Java8 map.getOrDefault()你真的了解吗

news2024/9/22 6:34:54

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

map.getOrDefault()方法

在Java编程中,Map是一种非常常用的数据结构。Map通常用于存储键值对,其中每个键映射到一个值。当我们尝试访问一个不存在的键时,Map会返回null值。这在某些情况下可能会导致错误,因此Java 8引入了一个新的方法getOrDefault(),该方法可用于解决这个问题。

getOrDefault()方法的语法如下:

该方法接受两个参数:要查找的键和默认值。如果键存在,则返回与该键关联的值,否则返回指定的默认值。

default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
    }

当使用Map集合时,如果我们尝试访问一个不存在的键,则会返回一个null值,这在某些情况下可能会导致错误。使用Map的getOrDefault()方法可以解决这个问题。

上代码:当我们需要获取某个对象的值进行一些操作,如果map的value值为空,就会抛出空指针异常,空指针异常在开发中有时候很恼火。

class Demo {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("1", 10);
        map.put("2",20);

        // 如果获取一个不存在的key会怎样?
        Integer str = map.get(3);
        // 空对象的引用方法会抛出 NullPointerException
        str.equals("str");
    }
}

结果如下:

在这里插入图片描述

使用getOrDefault()方法

class Demo {
    public static void main(String[] args) {
        // 创建一个Map对象
        Map<String, Integer> map = new HashMap<>();

        // 添加键值对到Map中
        map.put("高启强", 1);
        map.put("高启盛", 2);
        map.put("歪驴子", 3);

        // 获取键为"高启强"的值
        int count1 = map.getOrDefault("高启强", 0);
        System.out.println("Count1: " + count1);

        // 获取键为"老默"的值
        int count2 = map.getOrDefault("老默", 0);
        System.out.println("Count2: " + count2);
    }

}

结果如下:
在这里插入图片描述
在上面的示例中,我们首先创建一个Map对象,并向该Map中添加三个键值对。然后,我们使用getOrDefault()方法检索键为"高启强"和"老默"的值。由于"高启强"存在于Map中,因此返回值为1,而"老默" 不存在于Map中,因此返回默认值0。

使用场景

getOrDefault()方法通常用于编写更健壮的代码,以避免空指针异常。例如,假设我们有一个存储单词计数的Map,我们可以使用getOrDefault()方法来计算单词出现的次数,如下所示:

class Demo {
    public static void main(String[] args) {
        // 创建一个Map对象
        Map<String, Integer> wordCount = new HashMap<>();

        // 定义一句话
        String sentence = "welcome to java and welcome to here";

        // 将句子拆分成单词
        String[] words = sentence.split(" ");

        // 统计每个单词出现的次数
        for (String word : words) {
            int count = wordCount.getOrDefault(word, 0);
            wordCount.put(word, count + 1);
        }

        // 输出每个单词出现的次数
        for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }

}

结果如下:

在这里插入图片描述

在上面的示例中,我们创建了一个空的HashMap来存储单词计数。然后,我们定义了一个包含单词的句子,并使用split()方法将句子拆分成单词数组。接下来,我们使用for循环遍历单词数组,并使用getOrDefault()方法获取每个单词的计数。如果Map中不存在该单词,则默认计数为0。最后,我们使用put()方法将更新的计数存储回Map中。最后,我们遍历Map,输出每个单词及其出现次数。

最后

Map.getOrDefault()方法是一种非常有用的方法,它可以让我们更方便地处理Map中不存在的键。它通常用于编写更健壮的代码,以避免空指针异常。在使用该方法时,请注意defaultValue参数的类型必须与Map中值的类型兼容,否则会导致编译时错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/511157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件一直处于修改状态 git checkout 无法还原的问题解决方法

问题描述 最近在 RT-Thread 时&#xff0c;使用 Git 回退版本验证问题&#xff0c;后来 git pull 拉取最新代码后&#xff0c;发现里面有几个文件&#xff0c;一直为【修改】状态&#xff0c;并且无法还原&#xff0c;git checkout xxx git reset --hard 都用了&#xff0c;依旧…

基于AT89C51单片机的温度控制系统报警器

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87771724?spm1001.2014.3001.5503 源码获取 单片机读取温度传感器当前的温度值并在LCD液晶显示屏上的第一行显示当前的温度值&#xff0c;单片机读取按键状态并通过…

Flask框架之异常处理、请求钩子、上下文的使用

Flask框架之异常处理、请求钩子、上下文的使用 异常处理捕获指定异常状态码捕获指定异常类型抛出HTTP Exception 请求钩子概述基本使用 请求上下文概述应用上下文current_app对象g对象 请求上下文request对象session对象 异常处理 捕获指定异常状态码 可以使用app.errorhandle…

Github的使用

1.基本概念&#xff1a; 仓库&#xff08;Repository&#xff09;:仓库用来存放项目代码&#xff0c;每个项目对应一个仓库&#xff0c;多个开源项目则有多个仓库 收藏&#xff08;Star&#xff09;:收藏项目&#xff0c;方便下次查看 复制克隆项目:&#xff08;Fork&#x…

JVM类加载、类变量初始化顺序

题目 先来看一个题目&#xff0c;以下程序的输出结果是什么 运行结果 关于类加载机制 关于JVM的类加载 《深入理解Java虚拟机》中关于类加载是这样说的&#xff1a; Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#x…

【SLAM学习】基于Pangolin绘制运动轨迹

Pangolin是一个轻量级的跨平台视图控制库&#xff0c;主要用于可视化、交互和调试三维数据。该库提供了一系列图形界面工具&#xff0c;包括窗口、OpenGL渲染器、3D相机、图像显示等&#xff0c;可以方便地进行三维数据可视化和交互。 Pangolin库的主要特点如下&#xff1a; 轻…

SpringBoot的多配置文件

文章目录 1.配置文件的命名规则2.配置文件选择3.配置文件的优先级 1.配置文件的命名规则 配置文件一般要求以application开头&#xff0c;可以是.yml结尾的文件&#xff0c;也可以是.properties结尾的文件。 2.配置文件选择 当有多个配置文件&#xff0c;需要指定其中一个生…

关于C语言取余运算的那些大坑

0.前言 您好&#xff0c;这里是limou3434的一篇个人博文&#xff0c;感兴趣的话您也可以看看我的其他文章&#xff0c;本次我想给您带来的是关于C语言操作符‘%’的一些奇怪现象以及背后的原理解释&#xff0c;本章用了一点点python语法&#xff08;比如在python中“//”是整除…

C++开发环境的搭建-Windows:VSCode+mingw64+CMake

文章目录 一、软件安装1. 网址及下载的软件2. VSCode中配置关于C的最简插件&#xff1a; 二、C调试环境的编译要求1. 在编译时要带-g参数2. 多文件编译需要分步编译 三、VSCode的调试配置如下&#xff1a;1. 单文件调试设置4. 多文件调试设置 一、软件安装 1. 网址及下载的软件…

【JavaEE进阶】——第六节.第一个MyBatis程序

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;JavaEE进阶 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录 前…

计算机视觉(5)—— 图像分类

目录 五、图像分类 5.1 AlexNet 5.2 VGG 5.3 GoogLeNet、Inception 5.3.1 Inception V1 5.3.2 Inception V2 5.3.3 Inception V3 5.3.4 Inception V4 5.4 ResNet 残差网络 5.4.1 ResNet 5.4.2 ResNeXt 5.5 CNN设计准则 五、图像分类 5.1 AlexNet 5.2 VGG 5.3 Go…

【剑指 Offer】05,替换字符创中的空格;难度等级:简单。易错点:C++中 char 和 string 类型的转换

【剑指 Offer】05&#xff0c;替换字符创中的空格&#xff1b;难度等级&#xff1a;简单。 文章目录 一、题目二、题目背景三、我的解答四、易错点五、知识点&#xff1a;char 和 string 类型的转换 一、题目 二、题目背景 在网络编程中&#xff0c;如果 URL 参数中含有特殊字…

消息推送平台的实时数仓?!flink消费kafka消息入到hive

大家好&#xff0c;3y啊。好些天没更新了&#xff0c;并没有偷懒&#xff0c;只不过一直在安装环境&#xff0c;差点都想放弃了。 上一次比较大的更新是做了austin的预览地址&#xff0c;把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了&#…

windows安装Anaconda

Anacond是什么&#xff1f; 和Python有啥关系&#xff1f; 1、Anacond 是一个python的发行版&#xff0c;包括了python和很多常见的软件库, 和一个包管理器conda。常见的科学计算类的库都包含在里面了&#xff0c;使得安装比常规python安装要容易。 2、Anaconda是专注于数据分…

分布式系统概念和设计——时间和全局状态(分布式系统中的时间问题)

分布式系统概念和设计 时间和全局状态 全局物理时间的缺乏使我们很难查明分布式程序的执行时状态。 我们经常需要知道当进程B处在某种状态依赖进程是什么状态&#xff0c;但不能通过依靠物理时钟理解一个同一个时刻到底是什么情况。 维护分布数据一致性算法检查发送给服务器的…

数学(三) -- LC[1010][1015] 可被 K 整除的最小整数

1 可被 K 整除的最小整数 1.1 题目描述 题目链接&#xff1a;https://leetcode.cn/problems/smallest-integer-divisible-by-k/description/ 1.2 思路分析 模运算 如果让你计算 1234 ⋅ 6789 1234 \cdot 6789 1234⋅6789 的个位数&#xff0c;你会如何计算&#xff1f; 由于…

c高级day2

#include <stdio.h> #include <stdlib.h> #include <string.h>int arrMAX_1(void *p,int n,int m,int x,int y); int arrMAX_2(void *p,int n,int m,int x,int y); int main(int argc, const char *argv[]) {int n0,m0;printf("请输入行数i 列数j\n&quo…

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置

Baumer工业相机堡盟工业相机如何进行多个工业相机IP地址配置 Baumer工业相机Baumer工业相机进行多相机IP配置的技术背景Baumer工业相机如何进行多相机IP配置1.配置Baumer工业相机连接的PC端IP地址2.配置Baumer工业相机的IP地址 Baumer工业相机 Baumer工业相机堡盟相机是一种高…

R 中的探索性相关分析

动动发财的小手&#xff0c;点个赞吧&#xff01; 本文[1] 相关分析是探索两个或多个变量之间关系的最基本和最基础的方法之一。您可能已经在某个时候使用 R 执行过相关分析&#xff0c;它可能看起来像这样&#xff1a; cor_results <- cor.test(my_data$x, my_data$y, …

手机上调试pc端电脑上的项目

文章目录 前言1、window r 打开电脑命令窗口并输入cmd点击确定或者敲击回车键2、在cmd命令行面板上输入ipconfig获取本电脑的ip地址3、在手机浏览器中输入http://192.168.XX.XX:8080 即可 前言 手机上调试电脑运行的项目的前提条件是手机和电脑公用一个局域网&#xff08;也就…