将List<Map<String,Object>>转为List<Object>
2023-12-15 10:39:54
经常在开发中会需要将List<Map<String,Object>>转为List,Object也就是你自己对应的目标对象,因为经常要用,干脆就自己封装了一个,代码示例如下:
假设有一个类:Animal.java
public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// 省略getter和setter方法
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
将 List<Map<String, Object>> 转换为 List 类型。接收 Class 类型作为参数,并使用反射来创建指定类的对象:
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class MapListToObjectListConverter {
public static <T> List<T> convertList(List<Map<String, Object>> listOfMaps, Class<T> clazz) {
List<T> resultList = new ArrayList<>();
for (Map<String, Object> map : listOfMaps) {
try {
Constructor<T> constructor = clazz.getConstructor(String.class, int.class);
String name = (String) map.get("name");
int age = (int) map.get("age");
T instance = constructor.newInstance(name, age);
resultList.add(instance);
} catch (NoSuchMethodException | InstantiationException |
IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
return resultList;
}
public static void main(String[] args) {
// 假设这是从其他地方得到的List<Map<String, Object>>
List<Map<String, Object>> listOfMaps = new ArrayList<>();
Map<String, Object> map1 = Map.of("name", "Lion", "age", 5);
Map<String, Object> map2 = Map.of("name", "Tiger", "age", 3);
listOfMaps.add(map1);
listOfMaps.add(map2);
// 将List<Map<String, Object>>转换为List<Animal>
List<Animal> animals = convertList(listOfMaps, Animal.class);
// 输出转换后的Animal对象列表
for (Animal animal : animals) {
System.out.println(animal);
}
}
}
这里的 convertList 方法接受 List<Map<String, Object>> 和一个 Class 参数,其中 T 是你希望转换的目标类型。方法使用反射根据提供的类 clazz 创建对象,并将其添加到结果列表中。在这个例子中,我们将其用于 Animal 类型。
文章来源:https://blog.csdn.net/qq_39327650/article/details/134935546
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!