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

Java中将List转换为Map

在Java 8中,Stream API和Collectors类提供了一种方便的方式来处理集合数据。其中,将List转换为Map是一个常见的操作。下面我们将介绍如何使用Stream API和Collectors类将List转换为Map。

首先,假设我们有一个User类,包含id和name两个属性:

public class User {private int id;private String name;// 省略getter和setter方法
}

接下来,我们创建了一个User对象的List:

List<User> userList = new ArrayList<>();
userList.add(new User(1, "Alice"));
userList.add(new User(2, "Bob"));
userList.add(new User(3, "Charlie"));

现在,我们想要将这个List转换为一个Map,其中键是User对象的id,值是User对象本身。可以使用Stream API和Collectors类中的toMap()方法来实现:

Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

在上述代码中,我们使用Collectors.toMap()方法将List转换为Map。第一个参数是用于指定Map中键的属性或方法,这里我们使用User::getId指定了User对象的id属性作为键。第二个参数是用于指定Map中值的属性或方法,这里我们使用Function.identity()指定了User对象本身作为值。

如果User对象的属性不是唯一的,或者需要将List转换为Map<String, User>,则可以在toMap()方法中使用Collectors.toMap()的重载方法,并提供一个合并函数来解决冲突。例如:

List<User> userList = new ArrayList<>();
userList.add(new User(1, "Alice"));
userList.add(new User(2, "Bob"));
userList.add(new User(3, "Charlie"));Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getName, Function.identity(), (u1, u2) -> u1));

在这个例子中,我们使用User::getName指定了User对象的name属性作为键。由于name属性不是唯一的,我们提供了一个合并函数`(u1, u2) -> u1`,表示当出现重复的键时,使用第一个出现的值。

使用Stream API和Collectors类将List转换为Map的好处是代码简洁、易于理解和维护。相比于传统的循环遍历方式,使用Stream API和Collectors类可以大大减少代码量,并且可以利用多核CPU的优势,提高代码的执行效率。

除了将List转换为Map,Stream API和Collectors类还提供了许多其他的操作,例如对集合进行筛选、排序、分组、统计等。

http://www.lryc.cn/news/221540.html

相关文章:

  • 进程控制2——进程等待
  • k8s service
  • C语言 每日一题 PTA 11.6 day12
  • Git使用规范指南
  • axios和Ajax
  • Day06
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • 基础课18——智能客服系统架构
  • python执行cmd命令——控制电脑连接wifi——程序打包
  • Vue中nextTick的使用及原理
  • 【Linux】拓展:运维面试题,进程管理常见的7大问题
  • Android修行手册 - 一文全了解Kotlin几种静态变量、函数实现的那些事
  • Qt QTableView排序
  • Linux shell编程学习笔记22: () $() (()) 的用法小结
  • 1. Pthreads专栏简介
  • C++17 fallthrough属性
  • STM32 蜂鸣器介绍 配置 播放音节
  • 多目标最优化的资产配置
  • word图片的标题跑到了图片的上方。
  • electron打包下载资源失败,设置国内镜像
  • 架构漫谈 - 如何设计高性能、高可用、高扩展架构
  • matlab 读写ENVI标准数据
  • 如何对ppt文件设置修改权限?
  • STM32G030F6P6 芯片实验 (二)
  • 时间序列预测模型实战案例(七)(TPA-LSTM)结合TPA注意力机制的LSTM实现多元预测
  • Mysql多表设计
  • 第九章:最新版零基础学习 PYTHON 教程—Python 元组(第五节 -清除元组的5种方式方法)
  • 学习笔记4——JVM运行时数据区梳理
  • Splunk 创建特色 dashboard 报表
  • 如何在校园跑腿系统小程序中构建稳健的订单处理与分配系统?