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;
});
我想知道如果在过滤流后某些值不存在时如何执行某些行为。
让我们假设代码:
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;
});