ifPresent Stream的其他方法

Joh*_*ler 7 java lambda optional java-8 java-stream

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

我们假设代码:

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

我是如何在没有价值的情况下放一些Else后的ifPresent

orElseStream上有一些我可以调用的方法findFirst,但我看不到用这些方法做到这一点的方法orElse

Man*_*dis 11

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

如果你想在Optional非空时应用函数,你应该使用map.orElseGet如果Optional是空的话可以调用另一个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;
   });
Run Code Online (Sandbox Code Playgroud)