Java Map<String, Object> 转 Java实体类

Java Map<String, Object> 转 Java实体类

最近遇到一个需要将Map<String, Object>转成java实体类的需求, 所以找了一些资料结合需求完成了.

/**
     * Map转成实体对象
     *
     * @param map   map实体对象包含属性
     * @param clazz 实体对象类型
     * @return 实体类对象
     */
    public static <RESULT> RESULT mapToJavaEntity(Map<String, Object> map, Class<RESULT> clazz) {
        RESULT obj = null;
        try {
            if (map == null) {
                return clazz.newInstance();
            }
            clazz.newInstance();
            obj = clazz.newInstance();

            Field[] fields = obj.getClass().getDeclaredFields();
            for (Field field : fields) {
                int mod = field.getModifiers();
                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
                    continue;
                }
                field.setAccessible(true);
                // 我这里map的key有下划线格式的, 所以用了baomidou的stringutils来转义
                field.set(obj, map.get(StringUtils.camelToUnderline(field.getName())));
            }
        } catch (Exception e) {
            log.error("map转实体类error, map:{}, entity:{}", map, clazz.getName());
        }
        return obj;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将一个 `list<map<string,object>>` 换为 `list<实体类>`,首先需要定义一个对应的实体类,该实体类的属性和 `map` 中的键值对应。 假设实体类的名称为 `Entity`,该类的属性分别为 `name`、`age` 和 `gender`,对应的类型分别为 `String`、`Integer` 和 `String`。则可以将 `list<map<string,object>>` 换为 `list<实体类>` 的过程如下: 1. 创建一个空的 `list<实体类>`,命名为 `entityList`。 2. 遍历 `list<map<string,object>>` 中的每个 `map` 元素,命名为 `mapElement`。 3. 在每次遍历的过程中,创建一个新的 `Entity` 实例,命名为 `entity`。 4. 使用 `mapElement` 的 `get` 方法获取 `name`、`age` 和 `gender` 对应的值,并将其赋值给 `entity` 的相应属性。 5. 将 `entity` 添加到 `entityList` 中。 6. 遍历完成后,`entityList` 中包含了所有 `list<map<string,object>>` 中的元素对应的 `Entity` 实例。 7. 返回 `entityList`。 以下是一个示例代码: ```java import java.util.ArrayList; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<Map<String, Object>> mapList = new ArrayList<>(); // 假设 mapList 中已存在一些 map 元素 List<Entity> entityList = convertToList(mapList); // 调用 convertToList 方法进行换 // 打印 entityList 中的实体类属性 for (Entity entity : entityList) { System.out.println(entity.getName()); System.out.println(entity.getAge()); System.out.println(entity.getGender()); } } private static List<Entity> convertToList(List<Map<String, Object>> mapList) { List<Entity> entityList = new ArrayList<>(); for (Map<String, Object> mapElement : mapList) { Entity entity = new Entity(); entity.setName((String) mapElement.get("name")); entity.setAge((Integer) mapElement.get("age")); entity.setGender((String) mapElement.get("gender")); entityList.add(entity); } return entityList; } private static class Entity { private String name; private Integer age; private String gender; public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public void setGender(String gender) { this.gender = gender; } public String getName() { return name; } public Integer getAge() { return age; } public String getGender() { return gender; } } } ``` 注意,上述示例代码中,假设 `map` 中的键值对与实体类中的属性完全匹配,且类型也完全一致。如果不一致,需要根据实际情况进行类型换或适当处理。同时,示例代码以 Java 语言为例,其他编程语言的实现方式可能会有所不同。 ### 回答2: 将List<Map<String, Object>>换为List<实体类>可以通过以下步骤进行: 1. 创建一个空的List<实体类>对象来存储实体类的实例。 2. 使用for-each循环遍历List<Map<String, Object>>中的每个元素。 3. 对于每个元素,创建一个新的实体类对象。 4. 遍历当前Map<String, Object>中的每个键值对。 5. 对于每个键值对,使用键来获取在实体类中对应的属性名称,使用值来获取对应的属性值。 6. 使用反射机制,将属性值设置到实体类的相应属性中。 7. 将填充好属性值的实体类对象添加到List<实体类>中。 8. 返回填充好的List<实体类>对象。 以下是一个示例代码,假设要将List<Map<String, Object>>换为List<Person>: ```java List<Map<String, Object>> mapList = new ArrayList<>(); // 假设mapList中已经填充了数据 List<Person> personList = new ArrayList<>(); for (Map<String, Object> map : mapList) { Person person = new Person(); for (Map.Entry<String, Object> entry : map.entrySet()) { String propertyName = entry.getKey(); Object propertyValue = entry.getValue(); try { Field field = person.getClass().getDeclaredField(propertyName); field.setAccessible(true); field.set(person, propertyValue); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } personList.add(person); } return personList; ``` 通过上述步骤,可以将List<Map<String, Object>>成功换为List<实体类>。 ### 回答3: 要将`list<map<string,object>>`换为`list<实体类>`,首先需要创建一个与实体类相对应的类,该类的属性必须与map中的键值对对应。接下来,我们可以通过以下步骤进行换: 1. 创建一个空的`list<实体类>`,用于存放换后的实体对象。 2. 遍历`list<map<string,object>>`中的每个map对象。 3. 对于每个map对象,创建一个新的实体类对象。 4. 使用`map.get(key)`方法获取map中每个键对应的值,并将值设置到实体类的相应属性上。注意要进行类型换,将Object类型换为实体类属性所需的类型。 5. 将换后的实体类对象添加到步骤1中创建的列表中。 6. 循环结束后,返回换后的`list<实体类>`。 下面是一个示例代码: ```java List<Map<String, Object>> mapList = ...; // 待换的list<map<string,object>>对象 List<实体类> entityList = new ArrayList<>(); for (Map<String, Object> map : mapList) { 实体类 entity = new 实体类(); // 设置实体类的属性值 entity.set属性名1(类型换(map.get("键1"))); entity.set属性名2(类型换(map.get("键2"))); entity.set属性名3(类型换(map.get("键3"))); // ... entityList.add(entity); } return entityList; ``` 在示例代码中,`类型换`表示的是将`Object`类型换为实体类属性所需的类型具体换方法。 需要注意的是,在进行类型换时,要确保map中的键值对的键和实体类的属性名保持一致,否则可能会导致换出错。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值