java中,Map<Object, Object> 直接转为User对象
也可以直接使用 hutool来实现:hutool依赖:BeanUtil工具类的使用:对象转对象、对象转map、map转对象 。
假设有一个User对象,需要 使用 stream流 实现 Map<Object, Object> 直接转为User对象,其中 Map<Object, Object>的key就是 User的属性名称,所以,然后使用 User 的属性名称去匹配 Map<Object, Object>的key,匹配中了之后,自动转为对应的数据类型,使用 user.setXXX 方法赋值。
这里直接使用 Java 的反射机制和 Stream API 来实现将 Map<Object, Object> 转换为对象的功能。以下是一个示例代码,展示如何将 Map<Object, Object> 转换为 User 对象:
import java.io.Serializable;
public class User implements Serializable {
private String id;
private String name;
private int age;
// Getters and Setters
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
import java.lang.reflect.Method;
import java.util.Map;
import java.util.stream.Collectors;
public class MapToObjectConverter {
public static <T> T convert(Map<Object, Object> map, Class<T> clazz) {
try {
T instance = clazz.getDeclaredConstructor().newInstance();
Map<String, Method> setters =
Stream.of(clazz.getDeclaredMethods())
.filter(method -> method.getName().startsWith("set"))
.collect(Collectors.toMap(
method -> method.getName().substring(3).toLowerCase(),
method -> method
));
map.forEach((key, value) -> {
String propertyName = ((String) key).toLowerCase();
Method setter = setters.get(propertyName);
if (setter != null) {
try {
setter.invoke(instance, value);
} catch (Exception e) {
e.printStackTrace();
}
}
});
return instance;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Failed to convert map to object", e);
}
}
}
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<Object, Object> userMap = new HashMap<>();
userMap.put("id", "123");
userMap.put("name", "John Doe");
userMap.put("age", 30);
User user = MapToObjectConverter.convert(userMap, User.class);
System.out.println("User ID: " + user.getId());
System.out.println("User Name: " + user.getName());
System.out.println("User Age: " + user.getAge());
}
}
说明
User 类:定义了一个简单的 User 类,包含 id、name 和 age 属性。
MapToObjectConverter 类:包含一个 convert 方法,该方法使用反射机制将 Map<Object, Object> 转换为指定类型的对象。
使用示例:展示如何将 Map<Object, Object> 转换为 User 对象,并打印对象的属性值。
这个示例代码可以将 Map<Object, Object> 转换为对象,并根据键名匹配对象的属性名称。
原文地址:https://blog.csdn.net/csdn_life18/article/details/140642326
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!