2013-08-01 56 views
0

我可能在這裏很愚蠢......但我需要幫助這個!基本上我需要做一個.contains(「消息」)來確定密鑰是否已經包含傳入的消息。試圖獲取hashmap中的arraylist值

在此先感謝!

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

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--------------------------------------------------------"); 
    } 
+2

你現在遇到什麼問題,你有什麼試過? – lreeder

+0

目前它沒有將它添加到列表中。 – Petro

回答

2

什麼你添加到列表中的是商店的一個關鍵棕褐色和一個空的數組列表,

因此,您添加到列表中的商店的第一條消息是空的,因此您的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你不需要在這裏布爾比較作爲返回一個布爾值。

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

+0

讓我放棄一下;並且沒有日期對傳入消息無關緊要,因爲icoming消息沒有日期部分。 – Petro

+0

謝謝你這工作! – Petro

0

你有這樣的:

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--------------------------------------------------------"); 
    }