簡體   English   中英

如何遍歷多個地圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM