我有一个按钮,当单击该按钮时,它会循环通过ArrayList<User>
,并尝试将emailText
文本与对象getEmail()
匹配。
btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
User declaredUser = App.getUsers().stream()
.filter(o -> o.getEmail().equalsIgnoreCase(emailText.getText())).findFirst().get());
当电子邮件确实存在并且.get()
返回declaredUser
时,它可以正常工作。但是,如果没有匹配项,则会收到此错误:
线程“ AWT-EventQueue-0”中的异常java.util.NoSuchElementException:不存在值
我尝试像这样添加!= null
:
User declaredUser;
if ((declaredUser = App.getUsers().stream()
.filter(o -> o.getEmail().equalsIgnoreCase(emailText.getText())).findFirst().get()) != null) {
// Code here ...
}
但是,我仍然收到此错误。谁能指出正确的方向,以便首先检查findFirst()
是否返回值?谢谢
答案 0 :(得分:4)
如您所见,如果Optional#get
为空,则NoSuchElementException
抛出Optional<T>
;基于这个原因,我不建议您完全调用它,尤其是因为您不知道Optional<T>
是否为空。
由于Stream#findFirst
返回Optional<T>
,因此您可以使用Optional#ifPresent
仅在Optional<T>
为非为空时继续执行:
App.getUsers()
.stream()
.filter(o -> o.getEmail().equalsIgnoreCase(emailText.getText()))
.findFirst()
.ifPresent(declaredUser -> {
// declaredUser is in scope here!
});