当前位置: 首页 > news >正文

Java 中的 HashMap.merge() 方法详解

在日常 Java 编程中,我们经常会遇到以下场景:

“如果某个 key 存在,则对它的 value 进行某种操作;如果不存在,则设置一个默认值。”

传统的做法通常需要一系列 containsKey() 判断、get()put() 操作,这种方式不仅繁琐,而且容易出错。幸运的是,Java 8 为我们提供

一、merge() 方法简介

merge() 是 Java 8 在 Map 接口中新增的默认方法,其设计初衷是以函数式编程方式处理键值对的合并逻辑,可以极大地简化代码量。

方法定义:

default V merge(K key, V value,BiFunction<? super V, ? super V, ? extends V> remappingFunction);

 工作机制

  • 如果 key 不存在或映射值为 null,则直接 put(key, value)

  • 如果 key 存在且映射值不为 null,则使用 remappingFunction 合并旧值与新值,结果再放入 map。

    • 如果 remappingFunction 返回 null,该键值对将被移除。

二、参数含义解析

参数名称含义
key要插入或合并的键
value新的默认值(当 key 不存在时使用)
remappingFunction合并逻辑函数(当 key 存在时使用)

三、实际使用示例

实例一:(Java自带的方式的写法)

import java.util.HashMap;
import java.util.Map;public class MergeDemo {public static void main(String[] args) {Map<String, Integer> fruitCount = new HashMap<>();fruitCount.put("苹果", 2);// 如果“苹果”存在,则加上新值;否则设为新值fruitCount.merge("苹果", 3, Integer::sum);fruitCount.merge("香蕉", 1, Integer::sum);System.out.println(fruitCount);// 输出:{苹果=5, 香蕉=1}}
}

实例一:(lamda表达式的写法)

import java.util.HashMap;
import java.util.Map;public class MergeDemo {public static void main(String[] args) {Map<String, Integer> fruitCount = new HashMap<>();fruitCount.put("苹果", 2);// 如果“苹果”存在,则加上新值;否则设为新值fruitCount.merge("苹果", 3, (oldVal,newVal)+oldVal+newVal);fruitCount.merge("香蕉", 1, (oldVal,newVal)+oldVal+newVal);System.out.println(fruitCount);// 输出:{苹果=5, 香蕉=1}}
}

实例二、

Map<String, String> greetings = new HashMap<>();
greetings.put("张三", "你好");greetings.merge("张三", ",早上好", String::concat);
greetings.merge("李四", "您好", String::concat);System.out.println(greetings);
// 输出:{张三=你好,早上好, 李四=您好}

http://www.xdnf.cn/news/1233415.html

相关文章:

  • 【AI学习】RadioDiff:代码学习
  • 西门子 G120 变频器全解析:从认知到参数设置
  • SpringBoot 02 AOP
  • 「iOS」————weak底层原理
  • 「iOS」————SideTable
  • OpenVLA复现
  • 数据集-目标检测系列- 地球仪 数据集 globe>> DataBall
  • XGBoost三部曲:XGBoost参数详解
  • 数据结构(12)二叉树
  • 【数据结构】栈的顺序存储(整型栈、字符栈)
  • 在linux(ubuntu)服务器上安装NTQQ并使用
  • VS2019安装HoloLens 没有设备选项
  • rag学习-以项目为基础快速启动掌握rag
  • 1. 两数之和
  • uniapp 数组的用法
  • Removing Digits(Dynamic Programming)
  • 入门MicroPython+ESP32:安装逗脑IDE及驱动
  • JJWT 核心工具类 Jwts 源码解析
  • 高效离线转换方案:支持多任务并行处理
  • 通俗易懂解释Java8 HashMap
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • 一种基于入侵杂草优化算法(IWO)的聚类算法,并与K-Means、高斯混合模型(GMM)进行对比,Matlab
  • 内存、硬盘与缓存的技术原理及特性解析
  • 系统性学习数据结构-第一讲-算法复杂度
  • 疯狂星期四文案网第27天运营日记
  • sc-atac的基础知识(0)
  • 兴达餐饮 酒店 进销存管理系统软件
  • SPI通信中CS片选的两种实现方案:硬件片选与软件片选
  • 跨语言AI服务指标收集实战
  • Java试题-选择题(6)