java中实现map与对象相互转换的几种实现

当我们需要将Java中的Map和对象进行相互转换时,可以使用以下几种实现方法:

方法一:手动转换

手动将Map中的键值对映射到Java Bean中的字段,并反之。这种方法的实现相对比较简单,但是存在缺陷是需要手动对属性进行处理,比较繁琐,不够自动化

public class User {
    private Long id;
    private String name;
    private Integer age;
    // ... getter setter 方法
}

Map<String, Object> map = new HashMap<>();
map.put("id", 1L);
map.put("name", "Tom");
map.put("age", 24);

User user = new User();
user.setId((Long) map.get("id"));
user.setName((String) map.get("name"));
user.setAge((Integer) map.get("age"));

Map<String, Object> mapAgain = new HashMap<>();
mapAgain.put("id", user.getId());
mapAgain.put("name", user.getName());
mapAgain.put("age", user.getAge());

方法二:使用 MapStruct

MapStruct是一个Java注释处理器,根据Java Bean之间的映射自动生成Java Bean之间相互转换的代码。通过使用MapStruct,可以自动将Map和Java Bean进行转换,此外代码质量更好,更少的Bug,效率更高。

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    User map(Map<String, Object> map);

    Map<String, Object> map(User user);
}

Map<String, Object> map = new HashMap<>();
map.put("id", 1L);
map.put("name", "Tom");
map.put("age", 24);

User user = UserMapper.INSTANCE.map(map);

Map<String, Object> mapAgain = UserMapper.INSTANCE.map(user);

示例

以把Java对象转换为Map为例,运用方法二:

public class User {
    private String username;
    private String password;
    private int age;

    // getter 和 setter 方法
}

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
    Map<String, Object> toMap(User user);
}

User user = new User();
user.setUsername("Tom");
user.setPassword("123456");
user.setAge(18);

Map<String, Object> map = UserMapper.INSTANCE.toMap(user);
System.out.println(map.get("username"));  //Tom
System.out.println(map.get("password"));  //123456
System.out.println(map.get("age"));       //18

以上是将Java中的对象转换成Map,如果想要将Map转换成Java对象呢?接下来我们看一个示例:

public class User {
    private String username;
    private String password;
    private int age;

    // getter 和 setter 方法
}

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    @SuppressWarnings("unchecked")
    User toUser(Map<String, Object> map);
}

Map<String, Object> userMap = new HashMap<String, Object>() {{
    put("username", "Jerry");
    put("password", "000000");
    put("age", 20);
}};

User user = UserMapper.INSTANCE.toUser(userMap);
System.out.println(user.getUsername());  //Jerry
System.out.println(user.getPassword());  //000000
System.out.println(user.getAge());       //20

使用MapStruct的方法在代码结构上更加清晰明了,如果要进行大量的对象和Map转换,建议使用MapStruct,提高代码效率和可读性。

阅读剩余 58%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中实现map与对象相互转换的几种实现 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 详解Java对象创建的过程及内存布局

    Java程序在运行过程中不断地创建对象,那么对象创建的过程是怎样的,它又是如何在内存中占据一定的布局呢?下面我们就来详细探究一下Java对象创建的过程及内存布局。 Java对象创建的过程 1.类加载 在Java程序开始运行之前,会先将所有需要用到的类加载到内存中,并建立类与类之间的联系,形成类的层次结构。这个过程中有一个重要的概念——类加载器(class l…

    Java 2023年5月26日
    00
  • Spring获取ApplicationContext对象工具类的实现方法

    获取ApplicationContext对象是在使用Spring框架时非常常见的操作,可以方便地获取容器中的各种Bean实例。在Spring中,有多种方法可以获取ApplicationContext对象,下面给出了两种常用的方式: 方式一:通过注解@Autowried来获取ApplicationContext对象 import org.springframe…

    Java 2023年6月15日
    00
  • Java编程实现调用com操作Word方法实例代码

    下面是Java编程实现调用com操作Word方法的完整攻略和示例说明: 调用com操作Word方法的完整攻略 第一步:添加Word对象库 在Java项目中调用Word COM对象之前,首先需要添加Word对象库。在Eclipse中可以通过以下步骤添加: 打开Java项目,右键单击项目名称,选择“Properties”; 在“Java Build Path”中…

    Java 2023年5月23日
    00
  • Spring Boot构建框架详解

    SpringBoot构建框架详解 什么是SpringBoot SpringBoot是由Pivotal团队在2013年开源的一款基于Java的框架,它旨在让开发者更加便捷地创建Spring应用。SpringBoot具备自动配置、快速开发、无代码生成等特点,同时它也提供了包括Web、数据、消息等在内的一系列开发场景。 如何使用SpringBoot 1. 环境要求…

    Java 2023年5月15日
    00
  • java异常处理拦截器详情

    Java异常处理拦截器(Exception Handler)是一个对应用程序中的异常做出响应的组件。它可以捕捉并处理应用程序中发生的异常,从而使程序能够从异常中恢复并继续执行。在Java中,Exception Handler是通过异常处理代码块(try-catch)或者异常处理方法(throws)来实现的。 下面我们将具体讲解如何使用Java异常处理拦截器:…

    Java 2023年5月27日
    00
  • IntelliJ IDEA设置JVM运行参数的操作方法

    下面是详细的 “IntelliJ IDEA设置JVM运行参数的操作方法”攻略: 什么是JVM运行参数? JVM运行参数指定了在Java应用程序内部运行时,JVM使用的命令行参数。这些参数可以用于调整JVM的行为和性能,例如内存分配,垃圾回收策略,线程数等。在Java应用程序中,可以通过设置JVM运行参数更好地配置JVM,以来优化应用的性能和稳定性。 Inte…

    Java 2023年5月19日
    00
  • java 字符串转化为字符数组的3种实现案例

    下面是“Java 字符串转化为字符数组的 3 种实现案例”的攻略: 前言 在Java编程中,字符串和字符数组是两个常用的数据类型。字符串类型的数据以字符串形式存储,而字符数组则以字符的形式存储。而在某些情况下,我们需要将字符串类型数据转化为字符数组类型。本文将介绍 3 种 Java 字符串转化为字符数组的方法。 1. 使用 String 类的 toCharA…

    Java 2023年5月26日
    00
  • ANSI,Unicode,BMP,UTF等编码概念实例讲解

    编码概念实例讲解 计算机系统需要将字符、符号、汉字等抽象的概念转化为二进制数才能进行处理。在计算机领域中,为了表示和传输文字,人们发明了多种字符编码。本文将从ANSI, Unicode, BMP, UTF等编码方案入手,详细讲解它们的概念和特点。 ANSI编码 ANSI编码也称为ASCII编码,是美国信息交换标准代码(American Standard Co…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部