自学内容网 自学内容网

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)!