java - 尝试获取 hashmap 键内的 arraylist 值

标签 java arraylist hashmap

我可能在这里很愚蠢......但我需要帮助!基本上我需要执行 .contains("message") 来确定 key 是否已包含传入消息。

提前致谢!

编辑:正如注释一样,如果它已经存在,我不希望它执行任何操作!目前尚未将其添加到列表中。

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

最佳答案

您要添加到列表中的是商店编号的键和一个空数组列表,

因此,您添加到列表中的商店的第一条消息是空的,因此您的 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您不需要在此处进行 boolean 比较,因为contains()返回一个 boolean 值。

您的这种原始方法行不通的原因是执行 List.contains() 意味着您正在检查列表是否包含完全匹配的字符串,而它不会自从您添加字符串后,它还包含 "\n事件时间:"+formattedDate+"\n... 我怀疑它不会与 incomingMessage

关于java - 尝试获取 hashmap 键内的 arraylist 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18004297/

相关文章:

java - 从 Java 调用 Kotlin 时如何获取错误的行号?

java - 如何在挥杆中将鼠标指针更改为手指指针?

java - 关于消息发布的可分发客户端的建议

java - 如何扩展防御性编码的实现?例如。 vert.x CorsHandlerImpl

java - 如何将整数数组转换为数组列表和链表?

java - 尝试创建对象的数组列表,但应用程序因空指针异常而崩溃

java - 将csv文件读取到arraylist对象

Java HashMap containsKey 为现有对象返回 false

java - 比较两个数组列表以返回最新日期

c++ - 如何使用 tbb 实现并发哈希表,将键映射到不同类型的值?