无法检索添加到哈希映射中的值



当我第二次尝试检索数据时,此代码不会给我数据。

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

我不确定为什么我的循环没有给出正确的结果?我可以看到数据是可用的——它进入if部分进行验证,但没有返回数据,它进入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;
}

流解决方案。找到匹配项时,您的错误没有超出循环。

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

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

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

最新更新