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

《Java核心技术I》对并发散列映射的批操作

对并发散列映射的批操作

Java API提供了批处理,计时其他线程处理映射,这些操作也能安全的执行。

3种不同操作:

  • search(搜索),为每个键或值应用一个函数,直到函数生成一个非null的结果,然后搜索终止,返回这个函数的结果。
  • reduce(归约),组合所有键或值,这里需要提供一个累加函数。
  • forEach,为所有键或值应用一个函数。

每个操作都有4个版本:

  • operationKeys:处理键
  • operationValues:处理值
  • operation:处理键和值
  • operationEntries:处理Map.Entry对象。

上述各个操作,需要指定一个参数化阈值(parallelism threshold),如果映射包含的元素多于阈值,就会并行完成批处理,如果希望1个线程批处理,可以使用阈值Long.MAX_VALUE,尽可能多的线程运行使用阈值1.

search方法的几个版本:

U searchKeys(long threshold,BiFunctionf)

U searchValues(long threshold,BiFunctionf)

U search(long threshold,BiFunctionf)

U searchEntries(long threshold,BiFunction,? extends U>f)

例如:假设我们希望找出第一个出现次数超过1000次的单词,需要搜索键和值:

String result = map.search(threshold,(k,v) -> v>1000?k:null);

匹配第一个,如果都输入null则返回null。

forEach方法有两种形式:

第一种只对各个映射条目应用一个消费者函数,例如:

map.forEach(threshold,(k,v)->System.out.println(k+" -> "+v));

第二种,有一个额外的转换器函数作为参数,先应用者函数,结果传给消费者:

map.forEach(threshold,(k,v)->k+" -> "+v,System.out::println)

转换器可以用作一个过滤器,只要转换器返回null,这个值就会被悄无声息的跳过:

map.forEach(threshold,(k,v)-> v>1000?k+" -> "+v:null,System.out::println)

reduce操作用一个累加函数组合其输入,例如,计算所有值总和:

Long sum = map.reduceValues(threshold,Long::sum);

也可以提供一个转换器函数,例如计算最长键的长度:

Integer maxlength = map.reduceKeys(threshold,

String::length,//transformer转换器

Integer::max);//accumulator累加器

转换器也可以作为一个过滤器,通过null排除不想要的输入,统计大于1000次单词的条目值:

Long count = map.reduceValues(threshold,v->v>1000?1L:null,Long::sum);

int,long,double输出还有相应特殊操作,分别有后缀ToInt,ToDouble,需要把输入转换为一个基本类型值,并指定一个默认值和一个累加器函数,空时返回默认值:

long sum = map.reduceValuesToLong(threshold,

Long::longValue,原始类型转换器

0,空映射默认值

Long::sum);原始类型累加器

相关文章:

《Java核心技术I》对并发散列映射的批操作

对并发散列映射的批操作 Java API提供了批处理,计时其他线程处理映射,这些操作也能安全的执行。 3种不同操作: search(搜索),为每个键或值应用一个函数,直到函数生成一个非null的结果,然后搜索终止&…...

记录一次使用git无权限的问题排查

正常的配置了公私钥之后,在gitlab中也存储了配对的公钥,但当使用git clone 时,总是报无权限 由于在这台机器中添加了多个公私钥,有点复杂,我们可以使用命令 ssh -vvvT 调试一下 ssh -vvvT yourGitlabAddr...

appium学习之二:adb命令

1、查看设备 adb devices 2、连接 adb connect IP:端口 3、安装 adb install xxx.apk 4、卸载 adb uninstall 【包名】 5、把对应目录下的1.txt文件传到手机sdcard下 adb push 1.txt /sdcard 6、进入对应的设备里 adb shell 7、切入sdcard目录 cd /sdcard 8、ls 查…...

Linux Vi/Vim使用 ⑥

掌握 CentOS 7 下的 Vi/Vim 编辑器:从安装到精通 在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中,Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称,虽然初次上手有一定学习门槛,但掌握之后便能…...

JCR一区牛顿-拉夫逊优化算法+分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测

JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测 目录 JCR一区牛顿-拉夫逊优化算法分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院…...

easyExcel实现表头批注

背景&#xff1a; 网上大部分都不能直接使用&#xff0c;为此总结一个方便入手且可用的工具&#xff0c;用自定义注解实现 依赖包&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…...

Pytest测试用例使用小结

基础使用 Pytest 测试用例实现代码 import pytest from server.service import Servicepytest.fixture def service():return Service(logger)class TestService:classmethoddef setup_class(cls):"""初始化设置一次:return:"""logger.info(&q…...

LeetCode题练习与总结:132 模式--456

一、题目描述 给你一个整数数组 nums &#xff0c;数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成&#xff0c;并同时满足&#xff1a;i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 &a…...

IdentityServer4框架、ASP.NET core Identity

OAuth2.0 IdentityServer4 官网 中文官网 ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。 IdentityServer是一个中间件,它可以添加符合OpenID…...

【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)

Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 &#xff08;OC20…...

SpringBoot开发过程中经常遇到问题解决方案分享

目录 1. Spring Boot应用启动缓慢 2. 数据库连接池配置问题 3. Spring Boot应用无法连接外部服务 4. 配置文件读取不生效 5. Spring Boot应用的日志输出不完整 6. Spring Boot中的Transactional事务管理问题 1. Spring Boot应用启动缓慢 问题原因&#xff1a; Spring Boo…...

AR眼镜_消费级工业AR智能眼镜主板硬件解决方案

AR眼镜的研发是一项复杂的软硬件集成工程&#xff0c;它需要在摄影、音频、交互和连接等多个方面提供卓越的基础体验&#xff0c;因此产品的每个细节都显得尤为重要。 在设计AR眼镜时&#xff0c;重量、体积和散热性能都是必须认真考量的关键因素。在芯片平台的选择上&#xff…...

Springboot 核心注解

Spring Boot 是一个基于 Spring 框架的扩展&#xff0c;旨在简化新 Spring 应用的初始搭建以及开发过程。它通过自动配置和约定优于配置的原则&#xff0c;减少了开发者的工作量。Spring Boot 提供了一组核心注解和 Starter 依赖管理工具来帮助开发者快速启动项目。 1. Spring…...

Nacos集群搭建【Oracle作外部数据源】

一、知识点分析 1.Nocas是什么&#xff1f; Nacos是一个动态服务发现、配置管理和服务管理平台‌。 1‌.1定义与背景‌&#xff1a; Nacos&#xff0c;全称为Dynamic Naming and Configuration Service&#xff0c;是由阿里巴巴开源的云原生应用配套工具。它旨在简化微服务架…...

云轴科技ZStack出席中国电信国际EMCP平台香港发布会,持续推动海外合作

近日&#xff0c;以“云聚未来 翼起新篇”为主题的中国电信国际多云服务一站式平台&#xff08;E-surfing Managed Cloud Platform&#xff0c;简称EMCP平台&#xff09;新闻发布会在香港成功举办&#xff0c;标志着中国电信国际在云计算服务领域取得了又一重大进展。云轴科技…...

爬虫自动化之drissionpage+SwitchyOmega实现随时切换代理ip

本文介绍了如何使用DrizzlePage进行爬虫自动化,并重点讲解了首次启动时设置代理IP以及通过SwitchyOmega插件实现随时切换代理IP的方法。 安装一次,后面调用就不会再去安装了 下载地址:https://github.com/FelisCatus/SwitchyOmega/releases 这两个文件随便那个都可以,下载…...

docker安装kettle(PDI)并实现web访问

我是MAC电脑M1版本&#xff0c;希望把软件交给docker进行管理&#xff0c;最近公司同事都通过kettle来实现外部数据对接&#xff0c;所以我本地也有安装kettle需求&#xff0c;在网上找到了这个解决方案操作很简单&#xff0c;但出现了无法访问的情况。我的排查方式是&#xff…...

[软件工程]十.可靠性工程(reliable engineering)

1.什么是可靠性工程 我们希望软件在给定的时间内&#xff0c;运行的时候不会崩溃或者发生失效&#xff0c;同时能保护我们的数据和个人信息。我们要能够信任我们所使用的软件&#xff0c;这意味着软件必须是可靠的。可靠性&#xff08;reliability&#xff09;&#xff1a;系统…...

【Makefile】编译日志之输出重定向符号 >

用法1 make all >& compilelog.txt make all > compilelog.txt这两个编译命令在功能上有一些细微的区别&#xff0c;主要在于标准输出和标准错误的处理方式。 make all >& compilelog.txt 这个命令会将标准输出&#xff08;stdout&#xff09;和标准错误&a…...

linux之less

less命令是Linux系统中一个功能强大的文件查看工具&#xff0c;它允许用户分页查看文件内容&#xff0c;并提供了多种快捷键和选项来增强用户体验。以下是less命令的一些常用操作&#xff1a; 基本使用 查看文件使用less命令的基本语法是less [选项] [文件名]。例如&#xff0…...

如何用bitsandbytes轻松实现PyTorch大模型量化:内存减半,性能不减

如何用bitsandbytes轻松实现PyTorch大模型量化&#xff1a;内存减半&#xff0c;性能不减 【免费下载链接】bitsandbytes Accessible large language models via k-bit quantization for PyTorch. 项目地址: https://gitcode.com/gh_mirrors/bi/bitsandbytes 你是否曾因…...

2023B卷,阿里巴巴找黄金宝箱(4)

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:华为OD面试 文章目录 一、🍀前言 1.1 ☘️题目详情 1.2 ☘️参考解题答案 一、🍀前言 2023B卷,阿里巴巴找黄金宝箱(4)。 1.1 ☘️题目详情 题目:…...

Cadence 17.4导出Gerber文件保姆级避坑指南(附TMC2300电机驱动板实战)

Cadence 17.4导出Gerber文件保姆级避坑指南&#xff08;附TMC2300电机驱动板实战&#xff09; 第一次用Cadence Allegro 17.4导出Gerber文件的新手&#xff0c;大概率会在某个环节卡住——要么是钻孔文件莫名报错&#xff0c;要么是板厂反馈光绘层对不齐。这种挫败感我太熟悉了…...

动态架构跳跃:让视觉语言大模型高效适配垂直领域任务

1. 项目概述&#xff1a;从“大而全”到“快而准”的模型进化之路 在视觉语言预训练模型&#xff08;Vision-Language Pre-trained Models, VLPMs&#xff09;如CLIP、ALIGN等席卷多模态领域的今天&#xff0c;一个核心的工程与学术困境日益凸显&#xff1a;这些动辄数十亿参数…...

ComfyUI-Impact-Pack深度解析:从AI图像模糊到专业级细节增强的完整解决方案

ComfyUI-Impact-Pack深度解析&#xff1a;从AI图像模糊到专业级细节增强的完整解决方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. …...

别再花钱买板卡了!手把手教你用NI-MAX虚拟PCI6224玩转LabVIEW数字IO

零成本玩转LabVIEW数字IO&#xff1a;NI-MAX虚拟设备全攻略 在工程教育与原型开发领域&#xff0c;硬件成本往往是阻碍学习进程的第一道门槛。一块标准的NI PCI-6224数字IO板卡市场价超过万元&#xff0c;而学生和独立开发者可能需要反复实验数十次才能掌握基础操作。但鲜为人知…...

从原型到优化:基于LoRa SX1278与STM32的音频对讲系统实战剖析

1. 项目背景与原型机搭建 记得第一次用STM32F103C8T6驱动LoRa SX1278模块时&#xff0c;手边只有个简易麦克风模块和杜邦线。当时就想做个能传语音的无线对讲系统&#xff0c;没想到后来踩了这么多坑。这个项目最核心的三部分就是ADC采集声音、SPEEX压缩音频、LoRa传输数据&am…...

紫光同创Logos系列FPGA的PCB设计避坑指南:从BGA扇出到配置管脚,新手必看

紫光同创Logos系列FPGA的PCB设计避坑指南&#xff1a;从BGA扇出到配置管脚实战解析 第一次接触紫光同创Logos系列FPGA的硬件设计时&#xff0c;面对密密麻麻的BGA封装和复杂的配置电路&#xff0c;多数工程师都会感到无从下手。我在设计第一块PGL22G开发板时&#xff0c;就曾因…...

SAP CAP集成RAG架构实战:基于HANA Cloud与AI Core的企业级AI应用开发

1. 项目概述&#xff1a;当企业级SAP CAP遇上生成式AI如果你是一位SAP开发者&#xff0c;或者正在用SAP Cloud Application Programming Model (CAP) 构建企业级应用&#xff0c;最近可能被一个词刷屏了&#xff1a;RAG。没错&#xff0c;就是检索增强生成。当严谨、结构化、流…...

Prompt工程实战:从CRISPE框架到垂直应用,解锁AI模型高效协作

1. 项目概述与核心价值 如果你正在寻找一套能真正“榨干”ChatGPT、Midjourney、Stable Diffusion等主流AI模型潜力的中文提示词&#xff08;Prompt&#xff09;集合&#xff0c;那么你找对地方了。 langgptai/wonderful-prompts 这个开源项目&#xff0c;正是由《ChatGPT中文…...