在 Optional.filter() 之后调用方法而不传入对象

Calling method after Optional.filter() without passing in object

我能理解以下内容:

user
  .filter(u -> "Sam".equals(u.getName()))
  .ifPresent(this::doSomethingWithUser);

如果 user.getName 等于 "Sam" 则将 user 传递给本地方法 doSomethingWithUser().

但是,如果我只是想调用一个本地方法,而不传递 user 但保持检查 user.getName 等于 "Sam" 怎么办?

这个用例是否使使用 Optional 变得多余?

对于这种情况,您可以只检查 Optional 是否存在:

if(user.filter(u -> "Sam".equals(u.getName()).isPresent()) {
    // call your method without user
}

忽略强制函数参数即可。这意味着您不能使用 shorthand :: 语法并且像这样:

user
  .filter(u -> "Sam".equals(u.getName()))
  .ifPresent(u -> doSomethingWithoutUser());