gpt4 book ai didi

java - 如何在没有 getKey 方法的情况下从 Java 中的对象列表创建 map 列表?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:37:18 24 4
gpt4 key购买 nike

如何创建映射列表,其中每个键名都是从类属性的名称推断出来的,值是通过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"));

我想创建一个有序的 map 列表(有点像 scala),其中包含以下内容。

List<? extends Map<String, String>>

List(Map("id"->"A", "age"->"15"), Map("id"->"B", "age"->"25"))

最佳答案

没有“动态”,直接的事情可能看起来像:

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

与本地 helper ,例如:

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;
}

为了在这里完全动态,您必须使用 reflection查询字段名称。您可以找到如何做到这一点的示例 here .

但我强烈建议不要那样做:反射(reflection)应该永远是你最后的手段。 DTA 的概念表明您拥有来自某些“服务”的对象数据。如果是这样,为什么首先序列化到一个特定的 DTA 类,然后将该信息“扁平化”到一些通用的 Map 结构中?!

含义:当该服务为您提供序列化为 JSON 或 XML 的对象时......那么简单地使用 gson 或 jackson 之类的库来直接反序列化会更好数据到这种通用的“平面”基于 map 的对象中。例如 jackson 有一个 JsonNode类(class)。当您反序列化为此类对象时,您可以免费获得字段名称的映射!参见 here更多示例代码。

要点是:可以使用反射来识别字段。但是反射代码总是乏味且容易出错。如果可能,请远离自己这样做。

关于java - 如何在没有 getKey 方法的情况下从 Java 中的对象列表创建 map 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56648200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com