[英]How to Iterate Through Multiple Maps
所以本質上,我有兩個哈希圖,一個包含以下值:
rId33=image23
rId32=image22
rId37=image2
另一個包含此數據:
{image2.jpeg=C:\Documents and Settings\image2.jpeg, image22.jpeg=C:\Documents and Settings\image22.jpeg, image23.jpeg=C:\Documents and Settings\image23.jpeg}
我基本上希望能夠遍歷第一個map,找到key的匹配項,如果找到匹配項,獲取關聯值,然后查看第二個map,在keys中找到匹配項,然后拉出關聯值(表示文件路徑)。
例如,我正在考慮做這樣的事情(以下是簡化的)......
String val2 = "rId33";
for (String rID: map.keySet())
{
if (rID.contains(val2))
{
//enter code here
}
}
我正在查看可用於諸如 .getValue 之類的方法,但我不完全確定如何做到這一點。 任何幫助,將不勝感激。 提前感謝您的任何回復。
在 Bozho 的幫助下編輯代碼
else if ("v:imagedata".equals(qName) && headingCount > 0)
{
val2 = attributes.getValue("r:id");
String rID = imageMap.get(val2);
String path = imageLocation.get(rID + ".jpeg");
for (String rels: imageMap.keySet())
{
if (rels.contains(val2))
{
inImage = true;
image docImage = new image();
imageCount++;
docImage.setRelID(val2);
docImage.setPath(path);
addImage(docImage);
}
}
從我看你不需要迭代。 只是:
String value1 = map1.get(key1);
if (value1 != null) {
String path = map2.get(value1 + ".jpeg");
}
如果您不總是知道它是否是value1 + ".jpeg"
,但您只知道鍵以第一個值開頭,那么您可以使用以下命令迭代第二個 map:
for (Map.Entry<String, String> entry : map2.entrySet()) {
String key2 = entry.getKey();
String value2 = entry.getValue();
if (key.startsWith(value1)) {
return value2;
}
}
但請注意,第一個代碼片段是O(1)
(兩個操作都需要恆定時間),而第二個是O(n)
並回答標題中提出的問題:
獲取兩個映射的迭代器,並在while
循環中使用it1.next()
和it2.next()
。 如果任何地圖沒有更多元素( it.hasNext()
) - 中斷。
這似乎非常低效。 hash map 的全部意義在於進行快速查找。 你真的需要在rID
上使用contains
調用嗎? 換句話說,您能否更改您的 hash map 以便它直接包含您想要搜索的逐字字符串,而不僅僅是包含您想要作為子字符串搜索的字符串的字符串? 如果是,那么您可以使用已經給出的答案。 如果不是,並且無論出於何種原因您必須使用這些數據結構,那么執行您嘗試做的事情的方法如下:
String val2 = "rId33";
String path;
for (String rID: map.keySet())
{
if (rID.contains(val2))
{
path = secondMap.get(map.get(rID)+".jpeg");
break;
}
}
if (path == null)
{
//value not found
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.