java 将JSONArray值的List添加到List的List中,并将List的List逐个Map

q7solyqu  于 2022-12-02  发布在  Java
关注(0)|答案(1)|浏览(199)

第一步:将value[x,y,z]添加到List roles中,然后将keyroles(value)放入KV(HashMap)中。

|
|___>>>>{a=[x, y, z]}

第2步:将值[x,z]添加到角色列表中,它成功添加到列表中,但在将其添加到角色中时,它将值[x,y,z]更改为第1步中的值[x,z]。

|
|_____>>>>{a=[x, z], b=[x, z]}

必须是:{a=[x,y,z],B=[x,z]}

第3步:将值[x,y,z]添加到角色列表中,它成功添加到列表中,但在将其添加到角色中时,它在第2步中将值[x,z]更改为值[x,y,z],并在执行第2步期间将在第1步中更改的值更改为值[x,y,z]。

|
|______>>>>{a=[x, y, z], b=[x, y, z], c=[x, y, z]}

必须是:{a=[x,y,z],B=[x,z],c=[x,y,z]}

请帮助我这个代码,为什么它的改变值,我以前添加到Map.
第一个

实际输出

Array Key      :  [a, b, c, d]

Array Value : x
Array Value : y
Array Value : z
Key and Value      :{a=[x, y, z]}

Array Value : x
Array Value : z
Key and Value      :{a=[x, z], b=[x, z]}

Array Value : x
Array Value :y
Array Value : z
Key and Value      :{a=[x, y, z], b=[x, y, z], c=[x, y, z]}

Array Value : y
Array Value : z
Key and Value     :{a=[x, y, z], b=[x, y, z], c=[y , z], d=[x, y, z]}

预期输出:

Array Key      :  [a, b, c, d]

Array Value : x
Array Value : y
Array Value : z
Key and Value      :{a=[x, y, z]}

Array Value : x
Array Value : z
Key and Value      :{a=x, y, z], b=[x, z]}

Array Value : x
Array Value :y
Array Value : z
Key and Value      :{a=[x, y, z], b=[x, z], c=[x, y, z]}

Array Value : y
Array Value : z
Key and Value     :{a=[x, y, z], b=[x, z], c=[y , z], d=[x, z]}
fjaof16o

fjaof16o1#

您将列表rolesMap中的每个Key关联起来(因为您使用了对同一个对象的引用,并且在列表上调用clean()只会删除它的所有内容,而不会像您所期望的那样分配一个新列表)。
您需要在每个迭代步骤中示例化一个new列表,以便每个Key都Map到它自己的List,而该List不与其他Key共享。

public Map<String, List<String>> getUserDetails(String json) throws IOException {
    Map<String, List<String>> rolesByKey = new HashMap<>();
    
    List<String> arrayKeys = jsonUtil.getJsonArrayKey(json);
    
    for (String key : arrayKeys) {
        List<String> roles = new LinkedList<>();
        JSONObject jsonObject = new JSONObject(json);
        JSONArray explrObject = jsonObject.getJSONArray(key);
        for (var role : explrObject) {
            roles.add(role.toString());
        }
        rolesByKey.put(key, roles);
    }
    return rolesByKey;
}

***旁注:**请熟悉并尽量遵守Java language naming conventions *。

相关问题