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

标签 java list arraylist hashmap

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

相关文章:

java - 程序不返回

Java无限输入对话框循环

list - 如何获取未知长度的 CMake 列表的最后一个元素?

java - ArrayList无法解析变量类型

java - 如何从字符串数组中删除一个元素?

c - 如何只打印排序数组的第二个元素?

java - HTML : Unable to view the base64 image in html report

java - 将所有 `@QueryParam` 映射到 `JSON` 数据结构

string - 检查列表中的值是否是字符串的一部分

python - 拆分列表中的每个字符串并存储在多个数组中