我正在尝试使用函数式编程风格在 java swing 中创建一个登录功能,下面是我的代码
String username = txtUsername.getText();
String passwordStr = String.valueOf(txtPassword.getPassword());
User login = new User(username, passwordStr);
Optional<User> adminUser = Optional.of(new User("a", "a"));
Optional<User> user = Optional.ofNullable(login);
adminUser.filter(u -> u.equals(login))
.ifPresentOrElse(
u -> {
this.setVisible(false);
HomePageAdmin hma = new HomePageAdmin();
hma.setVisible(true);
},
() -> user.filter(u -> u.login(passwordStr))
.ifPresentOrElse(
u -> {
this.setVisible(false);
HomePagePeople hmp = new HomePagePeople(username);
hmp.setVisible(true);
},
() -> JOptionPane.showMessageDialog(null, "Wrong Credential")
)
);
一切正常,如果我尝试使用“a”以外的凭据作为用户名和“a”作为密码登录,但是当我尝试使用这些凭据登录系统时,它会显示“错误的凭据”窗格见下
我也用这个替代品尝试了上面的过滤功能的各种方法
User login = new User(username, passwordStr);
User loginAdmin = new User("a", "a");
Optional<User> adminUser = Optional.of(loginAdmin);
Optional<User> user = Optional.ofNullable(login);
adminUser.filter(u -> u.equals(login))
上面的代码给出了同样的错误并且不接受逻辑。但是,如果我尝试将
adminUser.filter(u -> u.equals(login))
更改为 adminUser.filter(u -> u.equals(loginAdmin))
,它工作得很好,但是这个逻辑是错误的,因为 adminUser 将始终等于 loginAdmin 因此在文本框中输入任何内容将允许用户登录到管理员页面如下例所示
非常感谢任何帮助