簡體   English   中英

試圖在hashmap鍵中獲取arraylist值

[英]Trying to get the arraylist value inside hashmap key

我可能在這里很蠢......但我需要幫助這個! 基本上我需要做一個.contains(“message”)來確定密鑰是否已包含傳入消息。

提前致謝!

編輯:就像一個筆記,我不希望它做任何事情,如果它已經存在! 目前它沒有將它添加到列表中。

EDIT2:日期對於傳入消息無關緊要,因為傳入消息沒有日期部分。

private Map<Integer,List<String>> map = new HashMap<Integer,List<String>>();        

public synchronized void addToProblemList(String incomingMessage, int storeNumber){
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");
    String formattedDate = sdf.format(date);
    if(map.get(storeNumber)==null){
        map.put(storeNumber, new ArrayList<String>());
    }
    for(String lookForText : map.get(storeNumber)){
        if(lookForText.contains(incomingMessage)){

        }else if(!lookForText.contains(incomingMessage)){
            map.get(storeNumber).add(incomingMessage+"\nTime of incident: "+formattedDate+"\n--------------------------------------------------------");
        }
    }
}

它曾經看起來像這樣,但它總是添加它:

    public synchronized void addToProblemList(String incomingMessage, int storeNumber){
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");
    String formattedDate = sdf.format(date);
    if(map.get(storeNumber)==null){
        map.put(storeNumber, new ArrayList<String>());
    }

    if(map.get(storeNumber).contains(incomingMessage)==true){
    //Do nothing
    }
    if (map.get(storeNumber).contains(incomingMessage)==false){
    map.get(storeNumber).add(incomingMessage+"\nTime of incident: "+formattedDate+"\n--------------------------------------------------------");
    }

您要添加到列表中的是商店編號的關鍵字和空數組列表,

因此,您添加到列表的商店的第一條消息是空的,因此您的for循環將不會執行,因為它沒有要迭代的元素。

所以加上這個

if(map.get(storeNumber)==null){
    ArrayList<String> aList = new ArrayList<String>();
    aList.add(incomingMessage+"\nTime of incident: "+formattedDate+"\n--------------------------------------------------------");
    map.put(storeNumber, aList);
}

注意map.get(storeNumber).contains(incomingMessage)==true你不需要在這里進行布爾比較,因為contains()返回一個布爾值。

你的原始方法不起作用的原因是做一個List.contains()意味着你正在檢查列表是否包含一個完全匹配的字符串,這是因為當你添加字符串時它也沒有包含"\\nTime of incident: "+formattedDate+"\\n...我懷疑不會只匹配incomingMessage

你有這個:

for(String lookForText : map.get(storeNumber)){
if(lookForText.contains(incomingMessage)){
}else if(!lookForText.contains(incomingMessage)){
map.get(storeNumber).add(incomingMessage+"\nTime of incident: "+formattedDate+"\n--------------------------------------------------------");
}
}

試試這個:

List<String> messages = map.get(storeNumber);
if(!messages.contains(incomingMessage)){
    map.get(storeNumber).add(incomingMessage+"\nTime of incident: "+formattedDate+"\n--------------------------------------------------------");
    }

暫無
暫無

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

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