搜索arraylist并比较字符串

时间:2017-02-24 17:40:56

标签: java arraylist while-loop boolean

我正在开发一个java应用程序,它从用户那里获取扫描仪字符串输入并比较两个字符串属性。目标是将该方法作为用户名和密码身份验证。代码编译但它似乎只循环遍历ArrayList中的第一行。

setup

1 个答案:

答案 0 :(得分:0)

使用for-each循环

你只是让它变得更复杂。假设您的目标是在ArrayList中找到与提供的凭据匹配的用户,您可以使用for-each循环使其更容易。

for (User user : users)
  • users此处为ArrayList类型。
  • 每个用户都是User个对象。 (我在这里假设这种类型,因为你没有提供你的问题。)

然后只需与提供的凭据进行比较,并在匹配时终止循环。

if (user.getUserName().equals(userName) && user.getPassword().equals(password))
{
    loggedInUser = user;
    break;
}

这就是它的全部内容。

使用while循环

顺便说一句,它似乎是一个功课问题不是吗?如果您必须使用while循环,请按以下步骤操作:

  • 在找不到用户时循环。
  • 如果发现用户中断了循环。
  • 如果迭代索引大于arraylist大小,则中断。

将其转换为代码,它看起来像这样:

User loggedInUser = null;

boolean found = false;
int index = 0;

while (!found)
{
    if (index >= users.size())
        break;

    User user = users.get(index++);

    if (user.getUserName().equals(userName) && user.getPassword().equals(password))
    {
        loggedInUser = user;
        found = true;
    }
}

到目前为止,很好,但我们甚至可以缩短它,并删除找到的布尔变量,并直接在那里使用索引。

int index = -1;
while (++index < users.size())
{
    User user = users.get(index);

    if (user.getUserName().equals(userName) && user.getPassword().equals(password))
    {
        loggedInUser = user;
        break;
    }
}

使用Java 8方式

User loggedInUser = users.stream()
     .filter(u -> u.getUserName().equals(userName))
     .filter(u -> u.getPassword().equals(password))
     .findFirst()
     .orElse((User) null);

希望这有帮助。