computeIfAbsent是Java 8引入的Map接口中的一个方法

computeIfAbsent是Java 8引入的Map接口中的一个方法,它提供了一种更高效且线程安全的方式来 conditionally compute or retrieve a value for a given key in a map. 当你想要为一个键计算一个值(如果该键尚不存在对应的映射关系),并且仅当该键还没有关联的值时才执行计算时,这个方法非常有用。

方法签名如下:

V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
  • K 是Map中键的类型。
  • V 是Map中值的类型。
  • key 是你想要检查和/或插入值的键。
  • mappingFunction 是一个函数,当给定的键在Map中不存在时会被调用。这个函数接受键作为参数,并返回应该与该键关联的值。

如果key在Map中已经存在,则该方法直接返回当前与该键关联的值,而不会执行mappingFunction。如果key不存在,那么mappingFunction会被调用,其结果会被插入到Map中与key关联,并返回这个新计算的值。


在提供的代码示例中,computeIfAbsent确保了如果dataMap中还没有与key相关的映射,就创建一个新的HashMap并与之关联。这样可以避免因重复的key导致的多次put操作,提高了效率,同时也简化了代码。

    private void addInfluxDbChannelHistoryDataToTheMap(List<FluxTable> fluxTableList, Map<String, Map<Integer, String>> dataMap) {fluxTableList.stream().flatMap(fluxTable -> fluxTable.getRecords().stream()).forEach(record -> {String channelIdWithDeviceId = Optional.ofNullable(String.valueOf(record.getValueByKey("channelIdWithDeviceId"))).orElseThrow(() -> new IllegalArgumentException("channelIdWithDeviceId is missing"));String deviceId = channelIdWithDeviceId.split("_")[0];String timeStr = Optional.ofNullable(String.valueOf(record.getValueByKey("_time"))).orElseThrow(() -> new IllegalArgumentException("_time is missing"));String time = influxDBUtils.convertIsoToCustomFormat(timeStr, DateUtils.YYYY_MM_DD_HH_MM_SS);String key = deviceId + "_" + time;Integer cid = Optional.ofNullable(record.getValueByKey("cid")).map(Object::toString).filter(s -> !s.equals("null")).map(Integer::valueOf).orElseThrow(() -> new IllegalArgumentException("cid is invalid"));String value = Optional.ofNullable(String.valueOf(record.getValueByKey("value"))).orElse("");dataMap.computeIfAbsent(key, k -> new HashMap<>()).put(cid, value);});}

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

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

相关文章

软考 系统架构设计师系列知识点之杂项集萃(36)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;35&#xff09; 第58题 对软件体系结构风格的研究和实践促进了对设计的复用。Garlan和Shaw对经典体系结构风格进行了分类。其中&#xff0c;&#xff08; &#xff09;属于数据流体系结构风格&am…

孝子黄香与颍川□董超

“香九龄&#xff0c;能温席&#xff0c;孝于亲&#xff0c;所当执。”家喻户晓、妇孺皆知的《三字经》让孝子黄香名扬千秋&#xff0c;成为“二十四孝”中闻名于世的“扇枕温衾”故事的主角。 黄香&#xff08;公元68—122年&#xff09;&#xff0c;字文强&#xff0c;东汉江…

【Apache Doris】Compaction 原理 | 实践全析

【Apache Doris】Compaction 原理 | 实践全析 一、Compaction 前文概要二、Compaction 版本策略三、Compaction 类型说明四、Compaction 工程实现五、Compaction 生产实践 作者 &#xff5c; 俞剑波 一、Compaction 前文概要 LSM-Tree 简介 LSM-Tree&#xff08; Log Structu…

C# 下载文件2

从服务下载压缩包 过程 发起请求 HttpWebRequest 断点续传 HttpWebRequest.AddRange() 获取服务资源的响应 HttpWebResponse 设置下载进度条 解压压缩包 ZipFile using System; using System.IO; using System.IO.Compression; using System.Net;namespace Test01 {clas…

【Vue】Pinia管理用户数据

Pinia管理用户数据 基本思想&#xff1a;Pinia负责用户数据相关的state和action&#xff0c;组件中只负责触发action函数并传递参数 步骤1&#xff1a;创建userStore 1-创建store/userStore.js import { loginAPI } from /apis/user export const useUserStore defineStore(…

Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数(摘要)

本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景&#xff1a;帮助所有读者精进 Python 技术&#xff0c;并增长职业和副业的收入。 本期周刊分享了 12 篇文…

大众点评js逆向过程(未完)

1、这里mtgsig已经被拼到url中 2、进入后mtgsig已经计算完&#xff0c; ir he(this[b(4326)], !1), 就是加密函数 32 次 796 1143 ->508 -> 754 -> 1151 160 注意IC这个数组 控制流平坦化进行AST 解析 AST网址

numpy.fft 与 torch.fft函数使用

本文目录 numpy.fft.fft2numpy.fft.fftntorch.fft.ffntorch.fft.fft2总结&#xff1a; numpy.fft.fft2 解释链接&#x1f517;&#xff1a;Link numpy.fft.fft2(a, sNone, axes(-2, -1), normNone) Compute the 2-dimensional discrete Fourier Transform. This function comp…

[whl]树莓派armv7l文件onnxruntime的whl所有下载地址汇总

下面onnxruntime所有版本都是树莓派armv7l平台的whl文件&#xff0c;不能用于windows,macOS或者ubuntu x86_64的系统&#xff0c;请认准文件名及其对应python版本下载。 onnxruntime版本下载地址onnxruntime-1.16.0-cp311-cp311-linux_armv7l.whl点我下载onnxruntime-1.16.0-c…

《每天十分钟》-红宝书第4版-代理与反射(二)

代理另一个代理 代理可以拦截反射 API 的操作&#xff0c;而这意味着完全可以创建一个代理&#xff0c;通过它去代理另一个代理。这样就可以在一个目标对象之上构建多层拦截网&#xff1a; foo: bar }; const firstProxy new Proxy(target, { get() { console.log(first pro…

uniapp开发微信小程序问题汇总

1. 自定义校验规则validateFunction失效 2. 微信小程序不支持<Br>换行 在 <text></text> 标签中使用\n(必须 text 标签&#xff0c;view 标签无效 ) 3. 微信小程序无法使用本地静态资源图片的解决方法 (1) 将图片上传到服务器&#xff0c;小程序访问该图片…

MySQL基础——函数和约束

目录 1函数 1.1字符串函数 1.2数值函数 1.3日期函数 1.4流程函数 2约束 2.1约束概述和演示 2.2外键约束&#xff08;表连接键&#xff09; 1函数 函数是指一段可以直接被另一段程序调用的程序或代码。 1.1字符串函数 MySQL中内置了很多字符串函数&#xff0c;常用的…

WPF界面设计

1、使用C#-WPF实现抽屉效果-炫酷漂亮的侧边栏导航菜单-SplitViewMD主题重绘原生控件的美观效果-提供源码Demo下载 码源地址&#xff1a;https://download.csdn.net/download/Prince999999/89424685 2、使用C#-WPF实现抽屉效果-菜单导航功能实现&#xff0c;常规的管理系统应该…

JVM 一些常见问题QA

GC Roots 虚拟机栈中引用的对象&#xff1b; 本地方法栈中JNI引用的对象&#xff1b; 方法区中类静态变量引用的对象&#xff1b; 方法区中常量引用的对象&#xff1b; Full GC是Minor GCMajor GC吗&#xff1f; Minor GC&#xff1a;回收年轻代&#xff1b; Major GC&…

【强化学习】gymnasium自定义环境并封装学习笔记

【强化学习】gymnasium自定义环境并封装学习笔记 gym与gymnasium简介gymgymnasium gymnasium的基本使用方法使用gymnasium封装自定义环境官方示例及代码编写环境文件__init__()方法reset()方法step()方法render()方法close()方法 注册环境创建包 Package&#xff08;最后一步&a…

描述React的组件生命周期方法,并解释它们在何时被调用。

React的组件生命周期方法分为三个阶段&#xff1a;挂载阶段&#xff08;Mounting&#xff09;、更新阶段&#xff08;Updating&#xff09;和卸载阶段&#xff08;Unmounting&#xff09;。以下是这些阶段中各个生命周期方法的描述和调用时机&#xff1a; 挂载阶段&#xff08…

Ubuntu启动之引导内核阶段

按照Linux系统从打开电源到进入系统的顺序&#xff0c;整个启动过程可分为以下阶段。 BIOS阶段&#xff0c;Ubuntu启动之BIOS阶段-CSDN博客引导程序阶段&#xff0c;Ubuntu启动之引导程序阶段-CSDN博客内核阶段&#xff0c;加载内核、初始化。进入系统&#xff0c;显示登录界面…

搭建Python虚拟环境(三):Conda

使用Conda搭建虚拟环境的详细指南 Conda 是一个开源包管理系统和环境管理系统&#xff0c;能够安装、更新、运行和管理软件包和环境。本文将详细介绍如何使用Conda搭建虚拟环境&#xff0c;包括安装Conda、常用命令、创建虚拟环境、激活虚拟环境、退出虚拟环境以及迁移虚拟环境…

Tomcat基础详解

第一篇&#xff1a;Tomcat基础篇 lecture&#xff1a;邓澎波 一、构建Tomcat源码环境 工欲善其事必先利其器&#xff0c;为了学好Tomcat源码&#xff0c;我们需要先在本地构建一个Tomcat的运行环境。 1.源码环境下载 源码有两种下载方式&#xff1a; 1.1 官网下载 https://…

时序预测 | MATLAB实现TCN-Attention自注意力机制结合时间卷积神经网络时间序列预测

时序预测 | MATLAB实现TCN-Attention自注意力机制结合时间卷积神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-Attention自注意力机制结合时间卷积神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-Attention自注意力机制结合时…