我觉得我错过了一些非常简单的东西,但我似乎无法为它找到很多帮助。所以我在mem SQL数据库中使用vaadin和h2设计登录。有一种方法可以从列表中的数据库中返回值。麻烦的是我遇到了下面这个方法的问题。它意味着遍历列表中的每个条目,如果找到匹配的用户名/密码,则返回true。如果没有返回错误.....
public boolean checkUserInDatabase(String username, String email) {
boolean result = false;
List<User> localArray = getUserList();
System.out.println("List retrieved...Checking user in database"+
localArray);
for (User u : localArray ) {
if (u.getUsername().equals(username)) {
result = true;
}
else {
result = false;
}
}
return result;
}
我知道此时我只检查用户名,但是当我将用户添加到数据库时,它仍然只会检查该数据库中的最后一个用户....想法?
答案 0 :(得分:7)
您正在检查每个值,但是您从最后一个值中检索它。你基本上需要一个你已经拥有的退出条件。将您的代码更改为此
public boolean checkUserInDatabase(String username, String email) {
List<User> localArray = getUserList();
for (User u: localArray) {
if (u.getUsername().equals(username)) {
return true;
}
}
return false;
}
答案 1 :(得分:3)
纯粹是合乎逻辑的。您正在遍历列表,只有在结尾返回值。因此,您的程序将遍历整个列表,并仅提供最后的结果。这是您完整,正确的计划:
public boolean checkUserInDatabase(String username, String email) {
boolean result = false;
List<User> localArray = getUserList();
System.out.println("List retrieved...Checking user in database"+ localArray);
for (User u : localArray ) {
if (u.getUsername().equals(username)) {
return true;
}
}
return result;
}
这样,如果你的程序找到了一个用户,它会直接回复true
,而不是通过列表的其余部分。
答案 2 :(得分:2)
一旦找到用户,你肯定应该返回布尔值。
if (u.getUsername().equals(username)) {
return true;
}
答案 3 :(得分:2)
您将浏览整个列表并每次重置返回值,因此最后一个是唯一重要的值。你需要这样的东西:
boolean userFound = false;
for (User u : localArray )
{
if (u.getUsername().equals(username))
{
userFound = true;
break;
}
}
return userFound ;
答案 4 :(得分:2)
你想在最后一行返回值的想法实际上是好的 - 它是single-point-of-return的原则,我建议这样做。它使调试更容易。所以解决方案就像:
public boolean checkUserInDatabase(String username, String email) {
boolean result = false;
List<User> localArray = getUserList();
System.out.println("List retrieved...Checking user in database" + localArray);
for (User u : localArray ) {
if (u.getUsername().equals(username)) {
result = true;
break;
} else {
result = false;
}
}
return result;
}
虽然应该提到有不同的思想流派。我个人更喜欢单点回报,但两者都可以找到参数。
答案 5 :(得分:0)
Java 8解决方案将完全避免for循环并简单地说:
boolean userFound = collection.stream()
.map(User::getUsername)
.anyMatch(n -> n.equals(username))