我正在尝试为存储在 HashMap 中且具有一个父列表的列表添加值。
当我尝试这样做时,我得到“方法获取类型与列表不兼容”
我正在尝试以下代码,逻辑是:
- 如果我在 txnValue 列表中获得 tID 的匹配值,我只是添加“Values”列表,否则我将创建新的 HashMap。
List < HashMap > txnvalues = new ArrayList < HashMap > ();
for (LinkedHashMap < String, Object > linkedHashMap: resultset) {
HashMap data = new HashMap < > ();
HashMap attrData = new HashMap < > ();
List values = new ArrayList < > ();
data.put("values", new ArrayList < > ());
attrData.put("attrID", linkedHashMap.get("ID"));
attrData.put("attrVal", linkedHashMap.get("VAL"));
String txnID = linkedHashMap.get("T_ID").toString();
if (!txnvalues.stream().anyMatch(list -> list.containsValue(txnID))) {
data.put("tID", linkedHashMap.get("T_ID"));
values.add(attrData);
data.put("Values", values);
txnvalues.add(data);
} else {
txnvalues.get("Values").add(attrData); // this Line throws error
}
}
例子:
[{
"tID":123,
"Values":[{attrID:1,attrVal:123}]
}]
//Here If linkedHashmap.get("T_ID") = 123 which matches with tID then I want to add data in the Values
[{
"tID":123,
"Values":[{attrID:1,attrVal:123},{attrID:11,attrVal:467}]
}]
//If it doesn't match then I want to create new Hashmap and update txnValues Like this
[{
"tID":123,
"Values":[{attrID:1,attrVal:123},{attrID:2,attrVal:3435}]
},
{
"tID":456,
"Values":[{attrID:2,attrVal:233}]
}
]
最佳答案
我决定参数化你所有的各种迭代。下面是参数化代码。
List<HashMap<String, List<HashMap<String, Object>>>> txnvalues = new ArrayList<HashMap<String, List<HashMap<String, Object>>>>();
for (LinkedHashMap<String, Object> linkedHashMap : resultset) {//Error here
HashMap<String, List<HashMap<String, Object>>> data = new HashMap<String, List<HashMap<String, Object>>>();
HashMap<String, Object> attrData = new HashMap<String, Object>();
List<HashMap<String, Object>> values = new ArrayList<HashMap<String, Object>>();
data.put("values", new ArrayList<>());
attrData.put("attrID", linkedHashMap.get("ID"));
attrData.put("attrVal", linkedHashMap.get("VAL"));
String txnID = linkedHashMap.get("T_ID").toString();
if (!txnvalues.stream().anyMatch(list -> list.containsValue(txnID))) {
data.put("tID", linkedHashMap.get("T_ID")); //Error here
values.add(attrData);
data.put("Values", values);
txnvalues.add(data);
} else {
txnvalues.get("Values").add(attrData); //Error here
}
}
首先,您的代码中有多个错误,例如尝试将 String 键和 Object 值放入 data
,这是一个 HashMap,它只接受一个 String 键和一个 List(字符串和对象的 HashMap)值。另一个这样的尝试是从 txnvalues
获取项目。通过字符串,当 txnvalues
是一个列表,因此需要一个整数索引参数。
其次,这里有一个从 undefined variable :resultset
.我们不知道它是什么或如何使用它,因为它从未在其他地方引用过。
第三,有很多方法可以处理嵌套集合。这个 >-> List<HashMap<String, List<HashMap<String, Object>>>>
简直太可怕了。
请以可读、参数化且可以正确编译且无错误的方式重新编写您的代码。仅参数化将帮助您跟踪哪些迭代器采用哪些参数,并有助于防止您来这里寻求帮助时遇到的问题。
关于java - 如何从嵌套在 Java 中的 hashmap 和列表中的列表中访问和添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70993311/