ifPresent Stream 的 else 方法

2022-09-03 13:41:45

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

让我们假设代码:

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

如果价值不存在,我如何放一些之后?ElseifPresent

Stream上有一些方法,我可以在之后调用,但我看不到使用它们的方法orElsefindFirstorElse


答案 1

findFirst返回 描述此流的第一个元素,如果流为空,则返回空的 Optional。Optional

如果要在不为空时应用函数,则应使用 . 如果为空,可以调用另一个 lambda 例如OptionalmaporElseGetOptional

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;
   });

答案 2

推荐