我有一個帶有名稱的地圖串列。 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
我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
由于UnsupportedOperationException在串列中獲取地圖是不可修改的。
您可以修復創建這些地圖的代碼。如果您無法控制它,您可以將每個地圖包裝在一個串列中,其中包含所需型別的地圖(我的意思是HashMap, LinkedHashMap,TreeMap等)。
List<Map<String, String>> maps = new ArrayList<>();
for (Map<String, String> map : streams)
maps.add(new HashMap<>(map));
}
嘗試使用迭代器在語法上是不正確的。增強for回圈(所謂的“for-each”回圈)可以與實作Iterable介面(不是Iterator)的物件一起使用,例如集合或Path. 并且增強for的回圈在底層利用了迭代器,您無需手動創建迭代器。
無論如何,問題的根源在于您的集合的性質,而不是迭代串列的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/475773.html
上一篇:在串列中拆分單詞并迭代字典
