参见英文答案 >
If not null – java 8 style2个
我想知道如果在过滤流后不存在某些值时如何做某些行为.
我想知道如果在过滤流后不存在某些值时如何做某些行为.
我们假设代码:
foo.stream().filter(p -> p.someField == someValue).findFirst().ifPresent(p -> {p.someField = anotherValue; someBoolean = true;});
如果没有价值,我如何在ifPresent之后放置某种Else?
解决方法
findFirst返回描述此流的第一个元素的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; });