我可能在这里很蠢......但我需要帮助这个!基本上我需要做一个.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--------------------------------------------------------");
}
答案 0 :(得分: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
答案 1 :(得分: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--------------------------------------------------------");
}