怎么吧map集合转为实体类集合
时间: 2025-01-02 11:11:29 浏览: 40
### 将Java Map集合转换为实体类对象列表
为了实现将`Map<String, Object>`类型的多个映射数据批量转化为指定的实体类对象列表,在给定的例子基础上可以构建一个通用的方法来完成这一操作。此过程涉及遍历输入的地图列表,并针对每一个地图调用已有的单个地图到实体类转化逻辑。
#### 方法定义
下面是一个可能用于执行上述任务的方法示例:
```java
public static <T> List<T> convertMapsToBeans(List<Map<String, Object>> maps, Class<T> clazz) {
List<T> beans = new ArrayList<>();
for (Map<String, Object> map : maps) {
T beanInstance;
try {
beanInstance = clazz.getDeclaredConstructor().newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor descriptor : propertyDescriptors) {
String propertyName = descriptor.getName();
if ("class".equals(propertyName)) continue;
Method setterMethod = descriptor.getWriteMethod();
if (setterMethod != null && map.containsKey(propertyName)) {
setterMethod.invoke(beanInstance, map.get(propertyName));
}
}
beans.add(beanInstance);
} catch (Exception e) {
throw new RuntimeException("Failed to create instance of " + clazz.getSimpleName(), e);
}
}
return beans;
}
```
这段代码实现了从一系列键值对组成的地图到相应数量的对象实例之间的转变,其中每个对象都由传入的`clazz`参数所代表的具体类型决定[^1]。
#### 使用示例
假设有一个学生信息表,现在希望通过一组包含学生成绩记录的数据结构创建对应的实体类对象数组,则可以通过如下方式调用上面定义好的函数:
```java
List<Map<String, Object>> studentRecords = Arrays.asList(
new HashMap<>() {{
put("name", "李四");
put("score", 90);
}},
new HashMap<>() {{
put("name", "王五");
put("score", 85);
}}
);
List<Student> students = convertMapsToBeans(studentRecords, Student.class);
for(Student s : students){
System.out.println(s.toString());
}
```
这里展示了如何利用之前提到的功能处理实际场景中的需求——即把多条关于学生的成绩记录打包进一个个具体的`Student`实例里去[^2]。
阅读全文
相关推荐

















