当前位置: 首页 > 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…...

从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析

1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时&#xff0c;我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤&#xff0c;用最直白的语言分享给各位开发者朋友。 MPP&#xff08;Media Process Platform&#xff09;是瑞芯…...

从零到一实战:基于快马平台快速开发企业级jiyutrainer在线评测系统

今天想和大家分享一个很实用的开发经验——如何快速搭建一个企业级的在线编程评测系统。最近正好有个朋友想做一个类似jiyutrainer的编程练习平台&#xff0c;我就用InsCode(快马)平台试了试&#xff0c;效果出乎意料的好。 项目需求分析 首先明确我们需要实现的核心功能&#…...

Python将Parquet文件转换为JSONL格式文件

prompt:如何使用 Python 将 Parquet 文件转换为 JSONL 格式文件&#xff1f; 请提供完整的代码示例&#xff0c;包括使用 pandas 或 pyarrow 读取 Parquet 文件&#xff0c; 并将每行数据以 JSON 格式逐行写入 JSONL 文件的实现方式。 假设 Parquet 文件包含结构化数据&#xf…...

美胸-年美-造相Z-Turbo真实案例:快速生成24套手游服装方案

美胸-年美-造相Z-Turbo真实案例&#xff1a;快速生成24套手游服装方案 1. 项目背景与挑战 在手游《幻境物语》的角色设计阶段&#xff0c;美术团队面临一个紧迫需求&#xff1a;为游戏中的"花语使者"职业设计24套不同风格的服装方案。传统手工绘制方案需要至少3周时…...

LumiPixel优化升级:如何利用Z-Image模型生成更细腻的像素人像

LumiPixel优化升级&#xff1a;如何利用Z-Image模型生成更细腻的像素人像 1. 引言&#xff1a;像素艺术的复兴与挑战 像素艺术作为一种独特的数字艺术形式&#xff0c;近年来在游戏、NFT和数字设计领域迎来复兴。然而传统像素创作面临两大核心挑战&#xff1a; 细节表现力不…...

HP-Socket创新项目原型迭代记录:变更、原因与效果

HP-Socket创新项目原型迭代记录&#xff1a;变更、原因与效果 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket HP-Socket作为一款高性能TCP/UDP/HTTP通信组件&#xff0c;其…...

功能齐全的屏幕截图C++实现详解(附源码)

目录 1、概述 2、屏幕截图的主要功能点 3、屏幕截图的主体实现思路 3.1、截图主窗口全屏置顶 3.2、桌面灰化 3.3、窗口自动套索 3.4、区域放大 3.5、截取区域的选择 3.5、截图工具条 3.6、矩形等图元的绘制 4、桌面灰化的实现细节 5、窗口自动套索实现 6、区域放大…...

# Kafka 消息队列实战指南

大数据开发核心技能&#xff1a;Kafka 架构原理、生产者消费者配置、Spark/Flink 集成、消息积压处理、数据一致性保障、生产环境案例&#xff0c;从 0 到 1 掌握企业级消息队列&#x1f4cc; 前言 真实生产问题 问题场景&#xff1a; 某电商公司数据平台遇到的问题&#xff1a…...

闽北哥-柔弱胜刚强:真正的强者,从不硬碰

柔弱胜刚强 ——真正的强者&#xff0c;从不硬碰“为什么真正厉害的人&#xff0c; 看起来都有些柔弱&#xff1f;&#x1f33f; 因为—— 刚强自毁&#xff0c;柔弱长存。&#x1f52e; 这不是权谋&#xff0c; 而是—— 天地运行的铁律。”&#x1f30a; 一、误解千年&#x…...

PTA L1-064 AI核心代码:从‘估值一亿’到‘精准实现’的避坑指南

1. 这道题为什么值"一亿"&#xff1f; PTA L1-064被戏称为"估值一亿"的题目&#xff0c;主要因为它在字符串处理中埋了多个隐蔽的坑点。我第一次做这道题时&#xff0c;看着题目要求觉得规则很明确&#xff0c;不就是几个字符串替换吗&#xff1f;结果提交…...