Java 如何将 List 转换为 MAP
liuian 2025-05-27 15:52 47 浏览
有时候我们需要将给定的 List 转换为 Map。
如果你使用的是 Java 8 以后版本的话,Stream 是你的好朋友。
Java 8
public Map<Integer, Animal> convertListAfterJava8(List<Animal> list) {
Map<Integer, Animal> map = list.stream()
.collect(Collectors.toMap(Animal::getId, Function.identity()));
return map;
}
上面的代码可以非常容易的完成转换,我们有一个 Animal 对象的 List。
上面的代码将会把 Id 作为 Key,然后生成的 Map 是以 id 为 Key,Animal 为Value 的 Map。
Guava
如果使用 Guava 就更加简单了。
public Map<Integer, Animal> convertListWithGuava(List<Animal> list) {
Map<Integer, Animal> map = Maps
.uniqueIndex(list, Animal::getId);
return map;
}
使用 Maps 的工具类就可以了,这个工具类可以直接用。
更进一步
如果对需要生成的 Map 进行处理。
Key 是对象中的一个值,Value 是 List 对象中的另外一个值。
例如可以使用下面的代码:
listingStatusList.stream().collect(Collectors.toMap(CListingStatus::getListingStatusKey, CListingStatus::getListingStatus));
其中 CListingStatus 对象是这样定义的。
@Entity
@Getter
@Setter
public class CListingStatus extends AbstractPersistable<Long> {
@ManyToOne
@JoinColumn(name = "rets_id", nullable = false)
private ConfRets confRets;
private String listingStatusKey;
private ListingStatus listingStatus ;
}
对 Map 中的对象设值
针对 Stream 中的对象,我们可能还需要重新设置为其他的对象。
这个时候我们就可以使用 lambda 函数了。
同样的代码:
HashMap<String, Agent> agentHashMap = (HashMap) mlsAgentList.stream().collect(Collectors.toMap(MlsAgent::getMlsAgentId, mlsAgent -> {
Agent agent = new Agent();
agent.setAgentId(mlsAgent.getMlsAgentId());
agent.setAgentNameFirst(mlsAgent.getNameFirst());
agent.setAgentNameLast(mlsAgent.getNameLast());
agent.setAgentEmail(mlsAgent.getEmail());
return agent;
}));
我们返回的 Map 使用了一个新的对象为 Value。
上面针对 Stream 转换为 Map 的方法进行了一些小总结,这些方法可能实际编程的时候使用的频率比较高。
同时能够避免大量使用 For 循环的情况。
Stream 还是需要好好了解下的。
相关推荐
- 最新款手机vivo(vivo最新款手机及价格表)
-
vivoX60Pro+、vivoX70Pro、vivoX60、vivoX70、vivoX70Pro+、vivoiQOO7、vivoiQOO7Pro、vivoIQOO8、viv...
- oppo万能密码6位密码(oppo手机6个数万能密码)
-
oppo手机6位数万能密码是:67766776,但是不要轻易尝试,因为当输入这个密码之后没你的手机就会自动关机,之后会自动重启开机,然后你的手机密码都会变成预设的状态,当手机变成预设密码状态之后,我们...
- 系统重装win10专业版官网(重装系统win10专业版步骤和详细教程)
-
win10重装系统后也需要安装硬件驱动的,不过win10自带的系统更新会主动扫描硬件并下载适配的硬件驱动程序,再自动安装,所以win10在装驱动这方面比之前的Windows系统方便得多。win10安装...
-
- u盘文件恢复工具破解版免费(u盘文件恢复工具软件)
-
迷你兔数据恢复提供了免费版供大家试用,这个免费版只是有恢复额度上的限制,其他方面基本上与正版是一样的,你可以用来感受一下步骤/方式1免费恢复u盘数据的方法如下:第1步:关闭软件的注册页面,选择免费试用。在扫描页面,选择要扫描的所有文件类型,...
-
2026-01-11 06:55 liuian
- win10密钥在哪里买(win10系统密钥在哪儿买)
-
Windows密钥的正规获取渠道有以下几种:1.购买正版Windows操作系统。在微软官方网站或授权的经销商处购买正版Windows操作系统,可以获得正规的密钥。2.从计算机制造商处获取。一些品牌...
- 万能声卡驱动器官方下载win10
-
重新安装声卡驱动的方法如下:1.首先需要确定你的声卡品牌和型号,在设备管理器中搜索声卡,展开此项,可以看到声卡的品牌和型号。2.在浏览器中搜索所需的驱动程序,例如你的声卡型号是RealtekHi...
-
- usb驱动程序在哪里(usb驱动叫什么名字)
-
U盘添加驱动号或路径的方法如下在我的电脑上按右键,在快捷菜单里,选择“管理”,打开“计算机管理”窗口。在计算机管理窗口里,选择“存储”下面的“磁盘管理”,如果看得到没有盘符的U盘,那么在这个U盘上按鼠标右键,选择“更改驱动器名称和路径”选项...
-
2026-01-11 05:05 liuian
- 美德少年事迹材料(美德少年事迹材料500字左右)
-
就写平时做了什么好事就可以了。他们分别是许昌市文化街小学六(1)班学生谭天、许昌市第一中学七(12)班学生安家宝。现年12岁的谭天是一个阳光男孩儿,他性格活泼,热情开朗,富有爱心,品学兼优,有较强的集...
- win7万能网卡驱动离线版安装包
-
要使用Win7网卡驱动离线包,首先将离线包下载到计算机上。然后,打开设备管理器,找到你的网卡设备。右键点击该设备,选择“更新驱动程序软件”。在弹出的对话框中,选择“浏览计算机以查找驱动程序软件”。然后...
-
- 音频驱动器怎么安装(音频驱动程序怎么安装)
-
1、在浏览器中输入并搜索,然后下载并安装。2、安装完成后打开360驱动大师,它就会自动检测你的电脑需要安装或升级的驱动。3、检测完毕后,我们可以看到我们的声卡驱动需要安装或升级,点击安装或升级,就会开始自动安装或升级声卡了。4、升级过程中会...
-
2026-01-11 02:55 liuian
- win11要不要升级
-
答案是:不必强更,稍安勿躁。 没错,Windows11系统的确是微软的最新力作,其中安卓APP可以在桌面系统中直接使用的“噱头”也极有吸引力,但是,按照win10更新后bug层出不穷的情况来看,正...
- windows7联想旗舰版(联想win7旗舰版配置)
-
你好!联想Windows7旗舰版并不是一个显示设备,而是一个操作系统。因此,无法用英寸来描述其大小。旗舰版是指Windows7操作系统的最高版本,具有更多的功能和特性与其他版本不同。Windows...
- 一周热门
-
-
飞牛OS入门安装遇到问题,如何解决?
-
如何在 iPhone 和 Android 上恢复已删除的抖音消息
-
Boost高性能并发无锁队列指南:boost::lockfree::queue
-
大模型手册: 保姆级用CherryStudio知识库
-
用什么工具在Win中查看8G大的log文件?
-
如何在 Windows 10 或 11 上通过命令行安装 Node.js 和 NPM
-
威联通NAS安装阿里云盘WebDAV服务并添加到Infuse
-
Trae IDE 如何与 GitHub 无缝对接?
-
idea插件之maven search(工欲善其事,必先利其器)
-
如何修改图片拍摄日期?快速修改图片拍摄日期的6种方法
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
