Java中List转换成Map的两种实现方式

 更新时间:2025年09月23日 08:53:30   作者:我需要打球  
Java中List转Map常用Stream API,通过collect(Collectors.toMap())实现,需明确键值规则并处理重复键冲突,支持灵活扩展

在 Java 中,将List转换为Map是常见操作,通常需要指定Map的键(Key)和值(Value),常用工具类有Java 8 Stream API

一、Java8 Stream API

package list2map;

import java.util.*;
import java.util.stream.Collectors;

// 定义实体类
class User {
    private Long id;
    private String name;
    
    // 构造函数、getter、setter省略
    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    public Long getId() { return id; }
    public String getName() { return name; }
}

public class ListToMapExample {
    public static void main(String[] args) {
        // 准备List数据
        List<User> userList = List.of(
            new User(1L, "Alice"),
            new User(2L, "Bob"),
//            new User(1L, "Bob"),如果两个id都是1,那么Bob会覆盖Alice
            new User(3L, "Charlie")
        );
        // 转换为Map<id, User>
        Map<Long, User> userMap = userList.stream()
            .collect(Collectors.toMap(
                User::getId,  // 键:User对象的id
                user -> user,   // 值:User对象本身
                    (oldValue,newValue) -> newValue, //冲突时取新值
                    TreeMap::new //指定Map的实现类

            ));
        //Map集合的遍历
        Set<Map.Entry<Long, User>> entries = userMap.entrySet();
        for (Map.Entry<Long, User> entry : entries) {
            System.out.println("entry.getKey() = " + entry.getKey());
            System.out.println("entry.getValue() = " + entry.getValue().getName());
        }
    }
}

二、传统方式

import java.util.HashMap;
import java.util.Map;

Map<Long, User> userMap = new HashMap<>();
for (User user : userList) {
    userMap.put(user.getId(), user);  // 手动put键值对
}

三、总结

  • 推荐方式:使用Stream.collect(Collectors.toMap()),代码简洁且支持灵活配置。
  • 核心要素:明确键(Key)、值(Value)的提取规则,处理可能的重复键冲突。
  • 扩展场景:可根据需求转换为不同的Map实现类,或只保留对象的部分属性作为值。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot快速配置数据源的方法

    SpringBoot快速配置数据源的方法

    这篇文章主要介绍了SpringBoot快速配置数据源的方法,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-10-10
  • Java代码中与Lua相互调用实现详解

    Java代码中与Lua相互调用实现详解

    这篇文章主要为大家介绍了Java代码中与Lua相互调用实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Spring中Bean的作用域与生命周期详解

    Spring中Bean的作用域与生命周期详解

    这篇文章主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧
    2021-08-08
  • Java如何利用策略模式替代if/else语句

    Java如何利用策略模式替代if/else语句

    这篇文章主要介绍了Java如何利用策略模式替代if/else语句,帮助大家优化自己的代码,提高程序运行效率,感兴趣的朋友可以了解下
    2020-09-09
  • Java实现二叉树的建立、计算高度与递归输出操作示例

    Java实现二叉树的建立、计算高度与递归输出操作示例

    这篇文章主要介绍了Java实现二叉树的建立、计算高度与递归输出操作,结合实例形式分析了Java二叉树的创建、遍历、计算等相关算法实现技巧,需要的朋友可以参考下
    2019-03-03
  • Java 向上转型和向下转型的详解

    Java 向上转型和向下转型的详解

    这篇文章主要介绍了 Java 向上转型和向下转型的详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java中的单向链表详解

    Java中的单向链表详解

    这篇文章主要介绍了Java中的单向链表详解,单向链表又叫单链表,是链表的一种,由节点构成,head指针指向第一个称为表头节点,而终止指向最后一个null指针,需要的朋友可以参考下
    2024-01-01
  • 在idea中添加JDK的简单图文教程

    在idea中添加JDK的简单图文教程

    这篇文章主要介绍了如何在IntelliJ IDEA中配置JDK,讲解了打开软件、进入Project Structure、选择SDKs、添加或选择JDK版本,最后确认并重启IDEA,需要的朋友可以参考下
    2024-12-12
  • C++和Java命令行绘制心形图案

    C++和Java命令行绘制心形图案

    这篇文章主要为大家详细介绍了C++和Java命令行绘制心形图案,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • java 使用poi 导入Excel数据到数据库的步骤

    java 使用poi 导入Excel数据到数据库的步骤

    这篇文章主要介绍了java 使用poi 导入Excel 数据到数据库的步骤,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12

最新评论