高效使用Map的“新”方法

article/2025/6/29 2:32:43

个人名片:
😊作者简介:一个为了让更多人看见许舒雅的宝贝的小白先生
🤡个人主页:🔗 许舒雅的宝贝
🐼座右铭:深夜两点半的夜灯依旧闪烁,凌晨四点的闹钟不止你一个。
🎅学习目标: 坚持前端的学习进度,做一个全栈开发工程师

Map的数据操作,你是不是还只会put、get方法?

Map是我们日常变成中十分常用的数据接口,在JDK8中,Map引入了几个新方法,可以简化我们在实际写代码过程中对Map的数据操作。

目录

🌟1.getOrDefault方法

🌟2. foreach

🌟3.merge

🌟4.putIfAbsent

🌟5.computer

🌟6.computeIfAbsent

🌟7.computeIfPresent


🌟1.getOrDefault方法

使用 getOrDefault 方法获取键为 "key1" 的值,如果不存在则返回默认值 "defaultValue"

public class MapTest {public static void main(String[] args) {// 测试 put() 方法testGetOrDefault();}private static void testGetOrDefault() {Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");// 使用 getOrDefault 方法获取键为 "key1" 的值,如果不存在则返回默认值 "defaultValue"String value = map.getOrDefault("key3", "defaultValue");System.out.println(value); // 输出: value1}
}

🌟2. foreach

使用 forEach 方法遍历 Map 中的键值对

    public static void main(String[] args) {// 测试 testGetOrDefault() 方法// testGetOrDefault();// 测试testForeach()方法testForeach();}private static void testForeach() {Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");// 使用 forEach 方法遍历 Map 中的键值对map.forEach((key, value) -> {System.out.println("Key: " + key + ", Value: " + value);});}
}

🌟3.merge

使用 merge 方法合并键为 "key1" 的值,如果键不存在则添加新的键值对

    public static void main(String[] args) {// 测试 testGetOrDefault() 方法// testGetOrDefault();// 测试testForeach()方法// testForeach();// 测试testMerge()方法testMerge();}private static void testMerge(){Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");// 使用 merge 方法合并键为 "key1" 的值,如果键不存在则添加新的键值对map.merge("key1", "newValue", (oldValue, newValue) -> oldValue + " " + newValue);System.out.println(map.get("key1")); // 输出: value1 newValue}
}

🌟4.putIfAbsent

putIfAbsent()方法的作用是,如果指定的键不存在于映射中,则将指定的键值对添加到映射中。

    public static void main(String[] args) {// 测试 testGetOrDefault() 方法// testGetOrDefault();// 测试testForeach()方法// testForeach();// 测试testMerge()方法// testMerge();// 测试testPutIfAbsent()方法testPutIfAbsent();}//putIfAbsent()方法的作用是,如果指定的键不存在于映射中,则将指定的键值对添加到映射中。private static void testPutIfAbsent() {Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");// 使用 putIfAbsent 方法添加键值对,如果键不存在则添加新的键值对map.putIfAbsent("key3", "value3");map.putIfAbsent("key2", "newValue");System.out.println(map.get("key3")); // 输出: value3System.out.println(map.get("key2")); // 输出: value2}
}

🌟5.computer

computer()方法的作用是计算指定键的哈希码,并返回计算结果。

computer方法需要传入2个参数:key、function。主要有3步操作

  • 获取到key对应的oldValue,可能为null

  • 经过function计算获取newValue

  • put(key, newValue)

  public static void main(String[] args) {// 测试 testGetOrDefault() 方法// testGetOrDefault();// 测试testForeach()方法// testForeach();// 测试testMerge()方法// testMerge();// 测试testPutIfAbsent()方法// testPutIfAbsent();// 测试testComputer()方法testComputer();}//computer()方法的作用是计算指定键的哈希码,并返回计算结果。private static void testComputer() {Map<String, Integer> map = new HashMap<>();List<String> keys = Arrays.asList("apple","orange","banana","orange");for (String itemString : keys) {map.compute(itemString, (k,v)->{if(v==null){v=1;}else{v += 1;}return v;});}for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " : " + entry.getValue());}}
}

🌟6.computeIfAbsent

compute方法衍生出来的方法,这个方法只在key不存在的时候,执行computer计算,如果说key对应的value存在,就直接返回这个value。

我们需要计算斐波那锲数列的时候,可以使用这个方法来简化代码

    public static void main(String[] args) {// 测试 testGetOrDefault() 方法// testGetOrDefault();// 测试testForeach()方法// testForeach();// 测试testMerge()方法// testMerge();// 测试testPutIfAbsent()方法// testPutIfAbsent();// 测试testComputer()方法// testComputer();// 测试testComputeIfAbsent()方法testComputeIfAbsent();}//computeIfAbsent()方法的作用是,如果指定的键不存在于映射中,则将指定的键值对添加到映射中。private static void testComputeIfAbsent() {Map<Integer,Integer> map = new HashMap<>();map.put(0, 1);map.put(1, 1);System.out.println(fab(5,map));}private static int fab(int n,Map<Integer,Integer> map){return map.computeIfAbsent(n, k->fab(n-1,map)+fab(n-2,map));//n-1和n-2是递归的条件,k是递归的参数,k->fab(n-1,map)+fab(n-2,map)是递归的公式,k是递归的参数,k->fab(n-1,map)+fab(n-2,map)是递归的公式。}
}

🌟7.computeIfPresent

computeIfPresent()方法的作用是,如果指定的键存在于映射中,则计算指定键的值,并将计算结果更新到映射中。

    public static void main(String[] args) {// 测试 testGetOrDefault() 方法// testGetOrDefault();// 测试testForeach()方法// testForeach();// 测试testMerge()方法// testMerge();// 测试testPutIfAbsent()方法// testPutIfAbsent();// 测试testComputer()方法// testComputer();// 测试testComputeIfAbsent()方法// testComputeIfAbsent();// 测试testComputeIfPresent()方法testComputeIfPresent();}//computeIfPresent()方法的作用是,如果指定的键存在于映射中,则计算指定键的值,并将计算结果更新到映射中。private static void testComputeIfPresent() {Map<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("orange", 2);map.put("banana", 3);// 使用 computeIfPresent 方法计算指定键的值,并将计算结果更新到映射中map.computeIfPresent("apple", (key, value) -> value * 2);map.computeIfPresent("orange", (key, value) -> value * 2);map.computeIfPresent("banana", (key, value) -> value * 2);// 输出更新后的映射for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " : " + entry.getValue());}}
}

 

这篇文章就到这里了,下次见!

🥇原创不易,还希望各位大佬支持一下!

👍点赞,你的认可是我创作的动力 !

🌟收藏,你的青睐是我努力的方向!

✏️评论,你的意见是我进步的财富!


http://www.hkcw.cn/article/xvIjTfnpuy.shtml

相关文章

35.x64汇编写法(二)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;34.x64汇编写法&#xff08;一&#xff09; 上一个内容写了&#xff0c;汇编调…

多地公共自行车退场 设备老旧促变革

多地公共自行车退场 设备老旧促变革!近期,多地宣布公共自行车项目停止运营。安徽省马鞍山市和县住房和城乡建设局发布公告称,该县公共自行车将于5月28日终止运营,有需要的市民在2025年6月28日前办理骑行卡押金退款业务。和县公共自行车系统于2016年2月正式运营,县城主城区…

Python----目标检测(训练YOLOV8网络)

一、数据集标注 在已经采集的数据中&#xff0c;使用labelImg进行数据集标注&#xff0c;标注后的txt与原始 图像文件同名且在同一个文件夹&#xff08;data&#xff09;即可。 二、制作数据集 在data目录的同目录下&#xff0c;新建dataset目录&#xff0c;以存放制作好的YOLO…

一周学会Pandas2之Python数据处理与分析-Pandas2时间序列数据分析

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 提供了强大的时间序列处理功能&#xff0c;是金融分析、物联网数据处理、业务指标监控等领域的核心工具。下面…

房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块

房屋租赁系统 JavaVue.jsSpringBoot&#xff0c;包括房屋信息、看房申请、租赁合同、房屋报修、收租信息、维修数据、租客管理、公告管理模块 百度云盘链接&#xff1a;https://pan.baidu.com/s/16YRGBPsfbd4_HxXhO0jM5Q 密码&#xff1a;smk4 摘 要 房屋是人类生活栖息的重要…

【PowerQuery专栏】Record.Combine 函数实现记录连接

Record.Combine 函数功能是将多个不同的记录进行合并&#xff0c;函数目前包含如下参数&#xff1a; 参数1为合并记录&#xff0c;数据类型为列表类型&#xff0c;值为需要进行合并操作的记录 函数的结果为记录类型&#xff0c;图为函数参数。 Record.Combine(record as lis…

C++标准模板库

C标准库参考&#xff1a; C 标准库-CSDN博客 标准模板库STL C 标准库 和 STL 的关系 1. 严格来说&#xff0c;STL ≠ C 标准库 STL&#xff08;Standard Template Library&#xff09; 是 C 标准库的一个子集&#xff0c;主要提供泛型编程相关的组件&#xff08;如容器、迭代器…

Grafana对接Prometheus数据源

实验环境 在上一章的基础上完成 一、Grafana介绍 Grafana是一个独立的开源项目&#xff0c;它可以对接很多项目&#xff0c;实现各种功能的扩展 使用grafana对接Prometheus可以更好的展示Prometheus的metrics&#xff08;指标&#xff09; 二、Grafana安装 1、安装Grafana…

Flex弹性布局

Flexible Box&#xff08;弹性盒子&#xff09;布局是CSS3中引入的一种强大的布局模式&#xff0c;它能够更高效地处理容器内项目的排列、对齐和空间分配问题&#xff0c;特别适合构建响应式设计。 基本属性 Flex容器&#xff1a;设置了display: flex或display: inline-flex的…

Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期)

Vue3&#xff08;watch&#xff0c;watchEffect&#xff0c;标签中ref的使用,TS,props,生命周期&#xff09; watch监视 情况三&#xff1a;监视reactive定义的对象类型的数据 监视reactive定义的对象类型的数据&#xff0c;默认开启深度监视。地址没变&#xff0c;新值和旧…

AI书签管理工具开发全记录(九):用户端页面集成与展示

文章目录 AI书签管理工具开发全记录&#xff08;九&#xff09;&#xff1a;用户端页面集成与展示前言设计思路实现步骤1. 路由配置2. 全局样式设置3. 首页实现4. Vite配置 设计说明1. 部分UI设计2. 响应式布局3. 加载更多功能 效果展示效果展示 AI书签管理工具开发全记录&…

基于IRI-2020模型的电离层特征参量计算与可视化

1. 研究背景 电离层是地球大气层中重要的组成部分&#xff0c;位于地面以上约60-1000公里高度范围内&#xff0c;包含大量自由电子和离子。电离层对无线电通信、卫星导航和空间天气监测等现代技术系统具有重要影响。国际参考电离层模型(IRI)是由国际空间研究委员会(COSPAR)和国…

Chapter 10 Inductive DC–DC Converters

Chapter 10 Inductive DC–DC Converters Design of Power Management Integrated Circuits - Bernhard Wicht 电感型DC-DC用电感做功率转换, 因为有开关, 也被称为开关型DC-DC. 电感型DC-DC相比LDO, 效率更高, 但是不那么"干净". 相比于电容型DC-DC (switched cap…

美股收涨 世纪铝业涨超21% 金属板块领涨市场

美东时间周一,美股三大指数集体收涨。道指涨0.08%,纳指涨0.67%,标普500指数涨0.41%。热门科技股多数上涨,AMD、Meta涨幅超过3%,超微电脑接近3%,博通超过2%,英伟达超过1%。特斯拉和谷歌跌幅超过1%。贵金属和金属原材料板块表现突出,世纪铝业涨幅超过21%,黄金资源超过16…

最大规模换俘 领导人会晤 俄乌再谈判有乾坤

当地时间6月2日,俄乌两国代表团在土耳其伊斯坦布尔就和平解决俄乌冲突举行第二轮直接谈判。谈判历时约一小时,于当地时间16时许结束。5月第一轮谈判后,乌称“毫无成果”,俄称“基本满意”。而本次土耳其总统埃尔多安则表示谈判取得了“重大成果”。俄乌双方就大规模换俘、交…

国足抵达雅加达备战世预赛18强赛 关键战在即

中国男足国家队于6月2日晚抵达印度尼西亚首都雅加达,准备参加5日在那里举行的2026美加墨世界杯亚洲区预选赛18强赛第9轮对阵印尼队的关键比赛。当地时间晚上10点30分,中国队在主教练伊万科维奇的带领下走出雅加达苏加诺-哈达国际机场,并登上大巴前往酒店。伊万科维奇在机场接…

尼日利亚洪灾致200余人遇难 救援工作已停止

尼日利亚洪灾致200余人遇难 救援工作已停止!当地时间6月2日,尼日利亚尼日尔州莫夸地方政府副主席穆萨金布库证实,近期洪灾导致的死亡人数已增至200人,另有500多人失踪。他表示救援工作已经停止,认为失踪人员已无生还可能。目前工作人员正加紧掩埋尸体,以防止疾病蔓延。5月…

②Pybullet干涉检查指令getContactPoints与 getClosestPoints介绍

1、指令格式说明 getContactPoints指令说明 该指令根据最近一次调用stepSimulation指令&#xff0c;返回接触点信息。它的输入参数信息如下所示; 该指令执行后在有干涉的情况下返回信息如下所示。没有干涉时&#xff0c;返回数据为空。 以下为使用示例&#xff0c;该示例为机…

Vue-Leaflet地图组件开发(二)地图核心功能实现

第二篇&#xff1a;Vue-Leaflet地图核心功能实现 1. 地图视窗管理 1.1 视窗状态持久化方案 // 增强版视窗保存功能 const saveLocation async (options {}) > {try {const {saveToLocal true, // 默认保存到本地存储saveToServer false, // 是否保存到服务器notif…

DAY 37 超大力王爱学Python

知识点回顾&#xff1a; 过拟合的判断&#xff1a;测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint&#xff0c;还包含训练状态 早停策略 作业&#xff1a;对信贷数据集训练后保存权重&#xff0c;加载权重后继续训练50轮&#xf…