2013-08-01 2 views
0

Я, наверное, здесь глуп, но мне нужна помощь в этом! В основном мне нужно сделать .contains («сообщение»), чтобы определить, содержит ли ключ уже входящее сообщение.Попытка получить значение arraylist внутри ключа hashmap

Заранее благодарен!

EDIT: Как примечание, я не хочу, чтобы он ничего не делал, если он уже существует! В настоящее время он не добавляет его в список.

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

Что вы добавляете в список ключ ключа магазина n umber и пустой список массивов,

Итак, первое сообщение для магазина, которое вы добавляете в список, пуст, поэтому цикл 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--------------------------------------------------------"); 
    } 
Смежные вопросы