当我第二次尝试检索数据时,此代码不会给我数据。
- 我输入域名和ip地址
- 我再次输入DN和Ip
- 我搜索第一个ip,它给出了正确的结果
- 当我搜索第二个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;
}