0

我可能在这里很愚蠢......但我需要这个帮助!基本上我需要做一个 .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--------------------------------------------------------");
    }
4

2 回答 2

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,您不需要在这里进行布尔比较,因为contains()返回一个布尔值。

您的这种原始方法不起作用的原因是List.contains()您正在检查列表是否包含一个完全匹配的字符串,而当您添加它还包含的字符串时,它不会包含"\nTime of incident: "+formattedDate+"\n...我怀疑会不匹配刚刚incomingMessage

于 2013-08-01T20:58:55.770 回答
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--------------------------------------------------------");
    }
于 2013-08-01T20:57:12.797 回答