当我们需要将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技术站