如何在Java对象列表创建,而无需信息getKey方法地图列表?

praxnet:

如何创建地图,其中每个键值名称从类属性的名称推断出的列表和价值是通过getter方法来把

我有在java中下面的类

class DTA {
  private String id;
  private String age;

  @Override
  public String toString() {
    return "DTA{" +
            "id='" + id + '\'' +
            ", age='" + age + '\'' +
            '}';
  }

  public DTA(String id, String age) {
    this.id = id;
    this.age = age;
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getAge() {
    return age;
  }

  public void setAge(String age) {
    this.age = age;
  }
}

我有类型的对象的列表DTA

List<DTA> listA = new ArrayList<>();
listA.add(new DTA("A", "15"));
listA.add(new DTA("B", "25"));

我要创造出有以下内容的地图(有点像斯卡拉)的有序列表。

List<? extends Map<String, String>>

List(Map("id"->"A", "age"->"15"), Map("id"->"B", "age"->"25"))
GhostCat致敬莫妮卡C.:

如果没有“动态”中,直截了当的事情可能是这样的:

List<Map<String, String>> x = listA
            .stream()
            .map(this::toMap)
            .collect(Collectors.toList());

与本地助手,如:

private Map<String, String> toMap(DTA dta) {
    Map<String, String> rv = new HashMap<>();
    rv.put("id", dta.getId());
    rv.put("age", dta.getAge());
    return rv;
}

为了完全动态的在这里,你将不得不使用反射来查询的字段名。你可以找到例子,说明如何做到这一点在这里

但我强烈建议这样做:反射应该永远是你的最后一招。的概念DTA表明你有对象的数据来自一些“服务”来了呢。如果是这样,为什么第一序列化为具体的DTA班,然后是“扁平化”的信息到一些通用的地图结构?

含义:当服务给你的对象被序列化为,说JSON或XML ......那么这将是好得多简单地使用像GSON或杰克逊库来直接反序列化数据到这种通用的“扁平化”为基础的地图对象。杰克逊例如有JsonNode类。当你反序列化为这样的对象,你会得到字段名的该映射是免费的!这里更多的示例代码。

的一点是:使用反射识别字段是可能的。反射代码总是单调乏味,而且容易出错。如果可能,这样做,自己躲得远远的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章