gpt4 book ai didi

java - 如何从嵌套在 Java 中的 hashmap 和列表中的列表中访问和添加值

转载 作者:行者123 更新时间:2023-12-05 00:51:52 24 4
gpt4 key购买 nike

我正在尝试为存储在 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/

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