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实现类,或只保留对象的部分属性作为值。

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

相关文章

  • 如何更快乐的使用Java 8中的Lambda特性

    如何更快乐的使用Java 8中的Lambda特性

    从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。下面这篇文章主要给大家介绍了关于如何更快乐的使用Java 8中的Lambda特性的相关资料,需要的朋友可以参考下
    2018-11-11
  • Java给PDF加水印并合并多个文件

    Java给PDF加水印并合并多个文件

    大家好,本篇文章主要讲的是Java给PDF加水印并合并多个文件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • springboot+shiro+jwtsession和token进行身份验证和授权

    springboot+shiro+jwtsession和token进行身份验证和授权

    最近和别的软件集成项目,需要提供给别人接口来进行数据传输,发现给他token后并不能访问我的接口,拿postman试了下还真是不行,检查代码发现项目的shiro配置是通过session会话来校验信息的,修改代码兼容token和session
    2024-06-06
  • SpringMVC ViewResolver视图解析器组件

    SpringMVC ViewResolver视图解析器组件

    这篇文章主要介绍了SpringMVC ViewResolver视图解析器组件,Spring MVC的视图解析器 ViewResolver 是框架中一个重要的组件,用于将控制器返回的逻辑视图名称解析为具体的视图实现对象,最终呈现给用户的是具体的视图实现
    2023-04-04
  • java中的export方法实现导出excel文件

    java中的export方法实现导出excel文件

    这篇文章主要介绍了java中的export方法实现导出excel文件,文章围绕java导出excel文件的相关资料展开详细内容,需要的小伙伴可以参考一下
    2022-03-03
  • Java INPUTSTREAM如何实现重复使用

    Java INPUTSTREAM如何实现重复使用

    这篇文章主要介绍了Java INPUTSTREAM如何实现重复使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java编程下字符串的16位,32位md5加密实现方法

    java编程下字符串的16位,32位md5加密实现方法

    下面小编就为大家带来一篇java编程下字符串的16位,32位md5加密实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Java 利用dom方式读取、创建xml详解及实例代码

    Java 利用dom方式读取、创建xml详解及实例代码

    这篇文章主要介绍了Java 利用dom方式读取、创建xml的相关资料,需要的朋友可以参考下
    2017-03-03
  • 详解Java解析XML的四种方法

    详解Java解析XML的四种方法

    本篇文章主要介绍了java解析XML的几种方式,XML现在已经成为一种通用的数据交换格式,给数据集成与交互提供了方便,有需要的可以了解一下。
    2016-11-11
  • Mock和@InjectMocks的区别及说明

    Mock和@InjectMocks的区别及说明

    @Mock和@InjectMocks是Mockito框架中的两个注解,前者用于创建模拟对象,后者用于将模拟对象注入到被测试类中
    2024-11-11

最新评论