如何在循环中将条目添加到存储在列表中的每个映射中
How to add an entry into each Map stored in a List in a loop
我有一个 list 的 maps 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
个地图 不可修改。
您可以修复创建这些地图的代码段。如果您无法控制它,您可以将每个地图包装在一个列表中,其中包含所需类型的地图(我的意思是 HashMap
、LinkedHashMap
、TreeMap
等)。
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
循环在后台使用迭代器,您无需手动创建迭代器。
无论如何,问题的根源在于您的集合的性质,而不是迭代列表的方式。
我有一个 list 的 maps 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
个地图 不可修改。
您可以修复创建这些地图的代码段。如果您无法控制它,您可以将每个地图包装在一个列表中,其中包含所需类型的地图(我的意思是 HashMap
、LinkedHashMap
、TreeMap
等)。
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
循环在后台使用迭代器,您无需手动创建迭代器。
无论如何,问题的根源在于您的集合的性质,而不是迭代列表的方式。