gpt4 book ai didi

java - 将一些 HashMap 键/值映射到 POJO

转载 作者:行者123 更新时间:2023-12-02 11:53:51 25 4
gpt4 key购买 nike

我有一个包含大约 300 个键/字符串值对的 HashMap 和一个包含大约 12 个字符串属性的 POJO,其中名称与键名称匹配。

我想知道如何将 HashMap 值获取到 POJO 中?

我开始使用反射和循环,但不确定如何动态构造setter方法名称,显然反射无论如何都是一个坏主意......但是FWIW:

    public void writeToFile(Map<String, String> currentSale) throws IOException {

SaleExport saleExport = new SaleExport();

Field[] fields = saleExport.getClass().getDeclaredFields();

for (Field field : fields ) {
System.out.println(field.getName());
saleExport.set +field(saleExport.get(field));

我以前使用过一次map struct,但它似乎不支持HashMap。

更新

这个answer看起来与我想要做的类似,但在未映射的字段上给出了堆栈错误:

Exception in thread "Thread-2" java.lang.IllegalArgumentException: Unrecognized field "Physical" (class com.SaleExport), not marked as ignorable (6 known properties: "date", "city", "surname", "streetName", "salesNo", "salesSurname"])
at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.SalesExport["Physical"])
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3738)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3656)
at com.CSVExport.writeToFile(CSVExport.java:20)
at com.JFrameTest.writefiletoDB(JFrameTest.java:135)
at com.JFrameTest$FileWorkerThread.run(JFrameTest.java:947)

忽略我尝试过的错误:

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

但是之后什么也没有被映射。

最佳答案

如果我正确理解了你的问题 - 你想根据 key 将 map 的值放入 Pojo 的成员变量中。

尝试以下方法。

主要类如下

package org.anuj.collections.map;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class ConverMapToPojo {

public static void main(String[] args) {
Map<String, String> map = getMap();
Set<String> keySet = map.keySet();

String fieldName = null;
Pojo pojo = new Pojo();
Field[] field = Pojo.class.getDeclaredFields();

for (Field f : field) {
fieldName = f.getName();
if (keySet.contains(fieldName)) {
pojo = setField(fieldName, map.get(fieldName), pojo);
}
}
System.out.println("fName = " + pojo.getfName());
System.out.println("lName = " + pojo.getlName());
}

private static Pojo setField(String fieldName, String value, Pojo pojo) {
switch (fieldName) {
case "fName":
pojo.setfName(value);
break;
case "lName":
pojo.setlName(value);
break;
}
return pojo;
}

private static Map<String, String> getMap() {
Map<String, String> map = new HashMap<String, String>();
map.put("fName", "stack");
map.put("lName", "overflow");
return map;
}
}

Pojo 类如下 -

public class Pojo {

private String fName;
private String lName;

public String getfName() {
return fName;
}

public void setfName(String fName) {
this.fName = fName;
}

public String getlName() {
return lName;
}

public void setlName(String lName) {
this.lName = lName;
}
}

结果是

fName = 堆栈lName = 溢出

关于java - 将一些 HashMap 键/值映射到 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47720059/

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