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,提高代码效率和可读性。

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

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

相关文章

  • 什么是线程安全的队列?

    以下是关于线程安全的队列的完整使用攻略: 什么是线程安全的队列? 线程安全的队列是指在线程环境下,多个线程同时访问队列中的元素而不会出现数据不一致程序崩溃等问题。在线程编程中,线程安全的队列是非常重要的,因为多个线程同时访问队列,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的队列? 为实现线程全的队列,需要使用同步机制来保证多个线程对队…

    Java 2023年5月12日
    00
  • 你知道Java的这些骚操作吗?

    当然,没问题! 你知道Java的这些骚操作吗? 1. 位运算 位运算是一种直接对二进制位进行操作的运算,通常用于系统底层开发和优化计算速度。Java内置了多种位运算符,具体有: 按位与(&) 按位或(|) 按位异或(^) 取反(~) 左移位(<<) 右移位(>>) 无符号右移位(>>>) 示例 int a =…

    Java 2023年5月23日
    00
  • Java Apache Commons报错“ReflectiveOperationException”的原因与解决方法

    “ReflectiveOperationException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 无效的方法:如果方法无效,则可能会出现此错误。在这种情况下,需要检查方法以解决此问题。 无效的参数:如果参数无效,则可能会出现此错误。在这种情况下,需要检查参数以解决此问题。 以下是两个实例: 例1 如果方法无效,则…

    Java 2023年5月5日
    00
  • springboot入门之profile设置方式

    下面我来详细讲解“springboot入门之profile设置方式”的完整攻略。 一、什么是profile 在Spring Boot项目中,profile是一种方便在不同环境中运行应用程序的方式。可以通过定义不同的配置文件来区分不同的环境,比如开发环境、测试环境、生产环境等等。 二、profile的配置方式 Spring Boot提供了多种配置profile…

    Java 2023年5月19日
    00
  • Java编程实现数组转成list及list转数组的方法

    Java编程实现数组转成list及list转数组的方法 在Java编程中,我们经常需要将数组和List之间进行转换。下面是将数组转换成List和将List转换成数组的方法: 将数组转换成List 使用Arrays.asList(Object[] array) 可以使用Arrays.asList()方法将数组转换成List。代码示例如下: // 定义一个数组 …

    Java 2023年5月26日
    00
  • 详谈Java中net.sf.json包关于JSON与对象互转的坑

    讲解“详谈Java中net.sf.json包关于JSON与对象互转的坑”的完整攻略: 背景 JSON是一种轻量级的数据交换格式,以其简洁、易读、易解析的特点被广泛应用。而在Java中,开发者可使用net.sf.json包来轻松实现JSON与对象之间的互转。但在使用过程中,开发者需要注意一些注意事项,否则就会掉入JSON与对象互转的“坑”中。 坑点一:JSON…

    Java 2023年5月26日
    00
  • 玩转spring boot MVC应用(2)

    “玩转springbootMVC应用(2)”是一个关于如何使用Spring Boot构建Web应用程序的攻略。在本攻略中,我们将详细讲解如何使用Spring Boot MVC来构建Web应用程序,并提供两个示例来演示如何使用Spring Boot MVC。 添加依赖 首先,我们需要在pom.xml文件中添加Spring Boot MVC的依赖。以下是一个示例…

    Java 2023年5月14日
    00
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    先介绍一下Java生成验证码的基本流程: 随机生成字符或数字。 使用随机字体样式和大小。 创建画布,设置画布大小、背景色和边框。 在画布上绘制字符和干扰线等图形。 输出验证码图片。 下面我们来看一个完整的Java随机生成验证码的代码示例: package com.example; import java.awt.Color; import java.awt.…

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