Java 企业级工具类全家桶-43-List转Map工具类
目录一、工具类功能二、所需环境三、方法与调用示例按需调用四、工具类源码可直接复制一、工具类功能一次遍历把集合摊成 Map按键分组、按键分组并只抽取某个属性、一个键只对应一个值三种形态都有键与组内元素保持原始顺序允许 null 键与 null 值。二、所需环境JDK 17或以上三、方法与调用示例按需调用方法序号1方法用途把一个集合按某个键摊成「键到整组元素」的 Map后面反复按键取比Collectors.groupingBy皮实键为null照样成一组不会当场抛异常方法定义public static T, K MapK, ListT groupBy(Collection? extends T source, Function? super T, ? extends K keyMapper)️入参解释public static T, K MapK, ListT groupBy(源集合, 键提取器)返回值解释MapK, ListT键到该组元素列表键按首次出现顺序排列边界口径结果是新建的LinkedHashMap组内列表也是新对象改结果不回写源集合键提取器返回null时null就是一个正常的键元素本身是null时怎么走由提取器决定兜得住就成组写成User::dept这种方法引用就抛NullPointerExceptionsource传null或空集合都返回可变的空 Map能直接put不会一会儿能用一会儿抛keyMapper传null抛NullPointerException: keyMapper 不能为 null方法示例groupBy(users, User::dept)按部门分组拿到{tech[User[id1, depttech, nameTom, age30], User[id3, depttech, nameBen, age28]], sale[User[id2, deptsale, nameAmy, agenull]], hr[User[id4, depthr, nameCid, age30]]}groupBy(List.of(new User(9L, null, 新同事, 25)), User::dept)拿到{null[User[id9, deptnull, name新同事, age25]]}部门为空也正常成一组groupBy(dirty, u - u null ? 无 : u.dept())拿到多出的一条无[null]null元素归进兜底键下groupBy(dirty, User::dept)抛NullPointerException提取器没兜住null元素groupBy(null, User::dept)之后put(x, new ArrayList())写得进去拿到{x[]}groupBy(users, null)抛NullPointerException: keyMapper 不能为 null方法序号2方法用途按键分组的同时只抽出想要的那个属性得到「键到属性列表」按部门看名单、按订单号看 SKU 这类投影不用先分组再对每组 map 一遍方法定义public static T, K, V MapK, ListV groupValueBy(Collection? extends T source, Function? super T, ? extends K keyMapper, Function? super T, ? extends V valueMapper)️入参解释public static T, K, V MapK, ListV groupValueBy(源集合, 键提取器, 值提取器)返回值解释MapK, ListV键到抽取出来的值列表边界口径值提取器返回null时列表里就是一个null元素位置保留、不会被抹掉键与组的顺序口径同方法1组内列表同样是新对象改它不影响源集合source为null返回可变的空 MapkeyMapper或valueMapper传null抛NullPointerException消息带上参数名方法示例groupValueBy(users, User::dept, User::name)拿到{tech[Tom, Ben], sale[Amy], hr[Cid]}groupValueBy(users, User::dept, User::age)拿到{tech[30, 28], sale[null], hr[30]}Amy 的年龄是null也占一位groupValueBy(users, User::dept, User::name)之后往tech那组add一个名字源集合大小仍是 4groupValueBy(users, User::dept, null)抛NullPointerException: valueMapper 不能为 null方法序号3方法用途把一个集合摊成「一键一值」的索引 Map键重复时留后出现的值建好 ID 到姓名这类索引后按键直接取比每次stream().filter()扫一遍省事方法定义public static T, K, V MapK, V toMap(Collection? extends T source, Function? super T, ? extends K keyMapper, Function? super T, ? extends V valueMapper)️入参解释public static T, K, V MapK, V toMap(源集合, 键提取器, 值提取器)返回值解释MapK, V键到单值键按首次出现顺序排列边界口径重复键保留后出现的值前一个直接被覆盖不抛IllegalStateException值可以是null键也可以是null这与Collectors.toMap遇null值就抛NullPointerException相反值为null时键仍然存在containsKey给trueget拿到的是null键的顺序按首次出现算后面重复把值换掉也不会把它挪到末尾source为null返回可变的空 Map两个提取器任一为null抛NullPointerException方法示例toMap(users, User::id, User::name)拿到{1Tom, 2Amy, 3Ben, 4Cid}toMap(users, User::id, User::age)拿到{130, 2null, 328, 430}键2的containsKey是truetoMap(dup, User::id, User::name)拿到{1后者}重复键留后面那条toMap(rows, User::id, User::name)拿到{3三重, 1一}键 3 重复过也仍排在第一位toMap(rows, User::id, User::name)拿到{null没ID, 1Tom}null键照样收toMap(null, User::id, User::name)之后put(9, 新)写得进去拿到{9新}toMap(users, null, User::name)抛NullPointerException: keyMapper 不能为 null方法序号4方法用途摊成「一键一值」的 Map同时把重复键怎么合交给自己的合并函数重复键不再只能二选一留首个、求和、拼接都能一行写完方法定义public static T, K, V MapK, V toMap(Collection? extends T source, Function? super T, ? extends K keyMapper, Function? super T, ? extends V valueMapper, BinaryOperatorV mergeFunction)️入参解释public static T, K, V MapK, V toMap(源集合, 键提取器, 值提取器, 重复键合并函数)返回值解释MapK, V键到合并后的单值边界口径合并函数的两个入参依次是「Map 里已有的值」与「这次的 new 值」多条重复按从左往右依次折叠合并函数返回null时这个键仍然存在、只是值为null与Map#merge返回null就删键不同实现是按containsKey判重的方法3 就是把这个参数写成「取新值」的快捷入口source为null返回可变的空 Map三个函数任一为null抛NullPointerException方法示例toMap(duplicated, User::id, User::name, (oldValue, newValue) - oldValue)拿到{1首个}重复键改成留第一个toMap(List.of(1, 2, 1, 3, 2), n - n, n - n, Integer::sum)拿到{12, 24, 33}同一个数出现几次就加几次toMap(three, User::id, User::name, (oldValue, newValue) - oldValue / newValue)拿到{1首个/后者/第三个}三条重复值从左往右依次折叠toMap(dup, User::id, User::name, (oldValue, newValue) - null)拿到{1null}键没被删掉containsKey仍是truetoMap(users, User::id, User::name, null)抛NullPointerException: mergeFunction 不能为 null四、工具类源码可直接复制领取方式 关注点赞收藏私信回复「java工具类」可领取100个工具类「Java企业级工具类全家桶1-100」的完整源码。 工具类已调试通过复制粘贴即可使用省时省力 可保存到自己网盘永久有效觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~

相关新闻

基于 STM32 的智能拐杖设计与 Proteus 仿真+源码

基于 STM32 的智能拐杖设计与 Proteus 仿真+源码

基于 STM32 的智能拐杖设计与 Proteus 仿真实现摘要我国视力障碍人群数量庞大,老龄化进程加速又使老年出行安全问题日益突出。传统盲杖功能单一,仅能提供触地探路的机械辅助,无法感知前方悬空障碍、积水坑洼与远距离障碍物,更缺乏…

2026/10/14 2:37:27 阅读更多 →
SUMO TraCI函数调用深度解析:从轮询到订阅的性能优化实战

SUMO TraCI函数调用深度解析:从轮询到订阅的性能优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:37:27 阅读更多 →
LLM_端到端自动驾驶

LLM_端到端自动驾驶

EAI:Embodied Artificial Intelligent,E2E:End to End,LLM:Large Language Mode 端到端自动驾驶专题:多模态输入融合、开源框架、头部企业与性能对比核心定义:端到端自动驾驶分为两类 纯端到端&…

2026/10/14 2:36:26 阅读更多 →

最新新闻

TikTok Shop 多店铺:平台侧哪些信息会被交叉比对

TikTok Shop 多店铺:平台侧哪些信息会被交叉比对

一、先说结论:官方对「关联」的定义,比你想的宽 TikTok Shop 官方在卖家学习中心有一篇《关联账号风险指南》,原文写得很直白——平台对关联账号的判定,通常不是依据单一的重合信息,而是多项风险信号综合判断&#xff…

2026/10/14 3:24:35 阅读更多 →
小白程序员必看:FDE前沿部署工程师,AI落地新风口

小白程序员必看:FDE前沿部署工程师,AI落地新风口

本文介绍了FDE(前沿部署工程师)这一新兴AI岗位,主要职责是连接AI技术与企业实际业务,解决大模型落地难题。文章阐述了FDE的工作内容、所需技能(AI基础、RAG/Agent应用、项目实践、沟通能力),并分…

2026/10/14 3:24:35 阅读更多 →
我把一个只有 7 行的 AI Skill 用出了花:聊聊 eli5

我把一个只有 7 行的 AI Skill 用出了花:聊聊 eli5

一个小到离谱的"插件" 最近我在整理 AI 工具的时候,翻到一个特别不起眼的东西,叫 eli5。它的完整定义只有短短几行,翻译成人话就一句:假装我是一个对这个话题一无所知的人,用一张 HTML 页面、大图配少量文字…

2026/10/14 3:24:35 阅读更多 →
北美外教一对一哪个好?2026年最新深度横评,价格、口音、互动性三维度打分

北美外教一对一哪个好?2026年最新深度横评,价格、口音、互动性三维度打分

在线少儿北美外教一对一赛道,经过多年迭代,目前平台差异化已经非常明显。很多家长选课只看宣传噱头,忽略师资口音纯度、课堂互动落地性、长期性价比等核心指标,最终出现“高价低效、口音不标准、上课全程旁听”等问题。本文基于20…

2026/10/14 3:24:35 阅读更多 →
C++手搓坐标图工具:从坐标变换到实时渲染的工程实践

C++手搓坐标图工具:从坐标变换到实时渲染的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:24:34 阅读更多 →
Virglrenderer 虚拟化技术深入解析 · 专栏目录

Virglrenderer 虚拟化技术深入解析 · 专栏目录

一套面向工程师的 virglrenderer 源码级技术专栏。从概述与演进讲起,再深入核心抽象、各后端实现、部署集成与工程实践。所有内容以仓库源码为准。 这里讲一下我为什么关注 virglrenderer,因为国产 GPU 的虚拟化需求。 随着国产化替代的推进&#xff0c…

2026/10/14 3:23:34 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →