无法检索哈希图中添加的值

Unable to retrieve the values added in the hashmap

当我第二次尝试检索数据时,这段代码没有给我数据。

  1. 我输入域名和ip地址
  2. 我再次输入 DN 和 Ip
  3. 我搜索 1st ip 它给出了正确的结果。
  4. 当我搜索第二个 ip 时,它说找不到域名

我不确定为什么我的循环没有给出正确的结果? 我可以看到数据可用它进入 if 部分已验证但没有 return 数据,它转到 else 部分并打印没有数据可用。

 //Main class
{
     System.out.println("1. Add DNS details");
     System.out.println("2. Find matching Domain Name");
     System.out.println("3. Exit");
     System.out.println("Enter your choice");

    //After entering the choice 
    System.out.println("Enter the IP address to find the domain name");
    ip = sc.nextLine();
    DomainName = dBO.findDomainName(ip);
}

    //FindDomainname.java class
    public String findDomainName(String ipAddress) {
        
      String domain=null;
        
        if(domainMap.isEmpty()){
        return domain;
        }
        else
        for (Map.Entry<String, String> entry : domainMap.entrySet()) {
            String k = entry.getKey();
            String v = entry.getValue(); 
            
            if (ipAddress.equals(v)) {
                domain = k;                 
            }
            else
            {
                domain = "No matching domain name found";
                
            }
     }    
    
    return domain;
}

您需要在找到条目后立即跳出 for 循环,否则它会移动到地图中的下一个条目并且该条目可能不匹配。像这样添加 break 语句:

if (ipAddress.equals(v)) {                
    domain = k;  
    break;               
}

流解决方案。当找到匹配项时,您的错误不是跳出循环。

public String findDomainName(String ipAddress) {
    return domainMap.entrySet().stream()
        .filter(entry -> entry.getValue().equals(ipAddress))
        .findAny().orElse(domainMap.isEmpty() ? null
                          : "No matching domain name found");
}