如何将Java对象列表转换为地图列表

发布于 2025-01-25 14:30:32 字数 322 浏览 5 评论 0原文

我有以下域对象

Class Student {
    private int id;
    private String name;
    private int age;
}

,并且有一个list< student>

如何将其转换为地图列表,如下所示

[{
    "id": 1,
    "name": "abc",
    "age": 2
}, {
    "id": 2,
    "name": "pqr",
    "age": 3
}]

I have the following domain object

Class Student {
    private int id;
    private String name;
    private int age;
}

and I have a List<Student>

How do I convert that into a list of map as follows

[{
    "id": 1,
    "name": "abc",
    "age": 2
}, {
    "id": 2,
    "name": "pqr",
    "age": 3
}]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与他有关 2025-02-01 14:30:32

最简单的方法是在student类中创建方法tohashmap()

public LinkedHashMap<String,Object> toHashMap(){
    LinkedHashMap<String, Object> h = new LinkedHashMap<>();
    h.put("Id",id);
    h.put("Name", name);
    h.put("Age",age);
    return h;
}

我使用linkedHashmap来保留插入顺序。完成此操作后,请尝试以下操作:

List<Student> ls = new ArrayList<>();
ls.add(new Student(12123,"Tom",12));
ls.add(new Student(12354,"George",21));
ls.add(new Student(12245,"Sara",16));
ls.add(new Student(17642,"Caitlyn",11));


List<LinkedHashMap<String,Object>> names = ls.stream().map(Student::toHashMap).collect( Collectors.toList() );

System.out.println(names);

输出:[{ID = 12123,name = tom,age = 12},{id = 12354,name = george,age = 21},{id = 12245,name = sara = sara = sara ,age = 16},{id = 17642,name = caitlyn,age = 11}]

Easiest way would be to create a method toHashMap() in your Student class:

public LinkedHashMap<String,Object> toHashMap(){
    LinkedHashMap<String, Object> h = new LinkedHashMap<>();
    h.put("Id",id);
    h.put("Name", name);
    h.put("Age",age);
    return h;
}

I use a LinkedHashMap to preserve the insertion order. Once that is done, try this:

List<Student> ls = new ArrayList<>();
ls.add(new Student(12123,"Tom",12));
ls.add(new Student(12354,"George",21));
ls.add(new Student(12245,"Sara",16));
ls.add(new Student(17642,"Caitlyn",11));


List<LinkedHashMap<String,Object>> names = ls.stream().map(Student::toHashMap).collect( Collectors.toList() );

System.out.println(names);

Output: [{Id=12123, Name=Tom, Age=12}, {Id=12354, Name=George, Age=21}, {Id=12245, Name=Sara, Age=16}, {Id=17642, Name=Caitlyn, Age=11}]

无力看清 2025-02-01 14:30:32

我会说获取对象并在声明的字段上进行迭代,这足以满足您要做的事情。类似的事情:

private static List<Map<String,Object>> objectsToMap(List<Object> objects) throws IllegalAccessException {
  List<Map<String,Object>> result = new ArrayList<>();
  for (Object object : objects) {
    Map<String,Object> map = new HashMap<>();
    for (Field field : object.getClass().getDeclaredFields()) {
      var oldAccessibility = field.canAccess(object);
      field.setAccessible(true);
      var value = field.get(object);
      map.put(field.getName(), value);
      field.setAccessible(oldAccessibility);
    }
    result.add(map);
  }
  return result;
}

尽管如此,似乎您正在尝试将一个普通对象转换为JSON字符串,并且有一些非常好的库。查看此 stackoverflow the of json的转换真的,您要实现的目标。

I'd say getting the object and iterating on the declared fields is good enough for what you're trying to do. Something like this:

private static List<Map<String,Object>> objectsToMap(List<Object> objects) throws IllegalAccessException {
  List<Map<String,Object>> result = new ArrayList<>();
  for (Object object : objects) {
    Map<String,Object> map = new HashMap<>();
    for (Field field : object.getClass().getDeclaredFields()) {
      var oldAccessibility = field.canAccess(object);
      field.setAccessible(true);
      var value = field.get(object);
      map.put(field.getName(), value);
      field.setAccessible(oldAccessibility);
    }
    result.add(map);
  }
  return result;
}

Nevertheless, it seems like you're trying to convert an ordinary object to JSON strings and there are libraries that to that super well. Check out this stackoverflow thread about conversion of objects to json if this is really what you're trying to achieve.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文