簡體   English   中英

可以比較來自 Map 的值<integer, arraylist<string> &gt; 與 ArrayList<string></string></integer,>

[英]Can compare values from Map<Integer, ArrayList<String>> with ArrayList<String>

我創建了一個Map<Integer, ArrayList<String>> map並且我想將 map 中的每個值與一個ArrayList<String> likeList進行比較,如果它們匹配則獲取密鑰。 我會帶上以后使用的鑰匙。

我試圖像這樣運行我的代碼,但它不起作用,因為它什么都不返回:

for (int key : map.keySet()) {
    if(map.get(key).equals(likeList)){
        index = key;
        Log.d("IndexN", String.valueOf(index));
    }
}

然后,我嘗試了這個:

int index = 0;
for (Map.Entry<Integer, ArrayList<String>> entry : map.entrySet()) {
    if(entry.getValue().equals(likeList)){
        index = entry.getkey();
    }
}

你有什么主意嗎?

當我嘗試上面的代碼時,它不返回索引。

從這條評論中,我了解到,一旦您在 map 中找到匹配項,則應記錄index並停止進一步處理。 換句話說,要么在likeList中只有一個 likeList 匹配,要么你想在 map 中找到likeList的第一個匹配。 如果是,您需要在找到匹配項后立即中斷循環(如下所示)。

for (int key : map.keySet()) {
    if (map.get(key).equals(likeList)) {
        Log.d("IndexN", String.valueOf(index));
        break;
    }
}

請注意,這將為您提供相同的值,每次執行時,僅當 map 只有一個likeList或 map 是LinkedHashMap時。 如果它是HashMap並且它有多個likeList ,則每次執行它時可能會得到不同的值,因為HashMap不保證其條目的順序。

但是,如果likeList中可能有多個 likeList 匹配,並且您想要記錄所有匹配並獲取相應鍵的列表,則可以執行以下操作:

List<Integer> indexList = new ArrayList<>();
for (int key : map.keySet()) {
    if (map.get(key).equals(likeList)) {
        Log.d("IndexN", String.valueOf(index));
        indexList.add(key);
    }
}

// Display the list of corresponding keys
System.out.println(indexList);

添加密鑰列表以存儲所有匹配項

List<Integer> indices = new ArrayList<>();
for (int key : map.keySet()) {
    if (map.get(key).equals(likeList)) {
        indices.add(key);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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