2013-08-01 3 views
0

저는 아마 여기 바보가 될 것입니다 ...하지만이 도움이 필요합니다! 기본적으로 .contains ("message")를 수행하여 키에 이미 들어오는 메시지가 포함되어 있는지 확인해야합니다.해시 맵 키 안에 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

무엇 당신은 목록에 추가하는 것은 가게의 열쇠입니다 umber 및 빈 배열 목록

그래서 목록에 추가하는 저장소에 대한 첫 번째 메시지는 비어 있으므로 for 루프는 반복 할 요소가 없으므로 for 루프가 실행되지 않습니다.

그래서 당신이 contains()은 부울을 반환 여기에 비교를 부울 할 필요가없는이

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--------------------------------------------------------"); 
    } 
관련 문제