ifPresent Stream 的 Else 方法

Else method for ifPresent Stream

我想知道如果在过滤流后某些值不存在时如何执行某些行为。

让我们假设代码:

foo.stream().filter(p -> p.someField == someValue).findFirst().ifPresent(p -> {p.someField = anotherValue; someBoolean = true;}); 

如果值不存在,我如何在 ifPresent 之后放置某种 Else

我可以在 findFirst 之后调用 Stream 上的一些 orElse 方法,但我看不到用这些 orElse

来实现的方法

findFirst returns 描述此流的第一个元素的 Optional,或者如果流为空,则为空 Optional。

如果您想在 Optional 不为空时应用函数,您应该使用 map。如果 Optional 为空,orElseGet 可以调用另一个 lambda 例如

foo.stream()
   .filter(p -> p.someField == someValue)
   .findFirst().map(p -> {
       p.someField = anotherValue;
       someBoolean = true;
       return p;
   }).orElseGet(() -> {
       P p = new P();
       p.someField = evenAnotherValue;
       someBoolean = false;
       return p;
   });