如何在循环中将条目添加到存储在列表中的每个映射中

How to add an entry into each Map stored in a List in a loop

我有一个 listmaps List<Map<String,String>> 名称为 streams.

它看起来像这样:

{
    "key1" : "value1",
    "key2" : "value2"
},
{
    "key1" : "value1",
    "key2" : "value2",
    "key3" : "value3"
},
{
    "key1" : "value1",
    "key2" : "value2"
}

我在地图上做了一个循环,想在特定条件下添加条目 这是我的代码:

public void addValue(String name, String value)
{
    for (Map<String,String> map :streams)
    {
        if (map.get("name").equals(name))
            map.put("newValue", value);
    }
}

我遇到异常:

java.lang.UnsupportedOperationException
    at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:71)
    at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(ImmutableCollections.java:714)

我试着写这个:

public void addValue(String name, String value)
{
    for (Iterator<Map<String,String>> map :streams.iterator())
    {
        if (map.get("name").equals(name))
            map.put("newValue", value);
    }
}

但是编译器在行上指示错误:streams.iterator() 错误:

Can only iterate over an array or an instance of java.lang.Iterable

我该如何解决这个问题?

由于正在获取列表中的 UnsupportedOperationException 个地图 不可修改

您可以修复创建这些地图的代码段。如果您无法控制它,您可以将每个地图包装在一个列表中,其中包含所需类型的地图(我的意思是 HashMapLinkedHashMapTreeMap 等)。

List<Map<String, String>> maps = new ArrayList<>();
for (Map<String, String> map : streams) 
    maps.add(new HashMap<>(map));
}

尝试使用迭代器的语法不正确。增强的 for 循环(so-called “for-each” 循环)可以与实现 Iterable 接口(而非 Iterator)的对象一起使用,例如集合或 Path.增强的 for 循环在后台使用迭代器,您无需手动创建迭代器。

无论如何,问题的根源在于您的集合的性质,而不是迭代列表的方式。