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)