天气: 风力:
java.util.Optional
Optional是一个是否含有非空值的容器,如果有值ifPresent()方法会返回true,如果没有值optional对象就被当作空的,ifPresent()方法会返回false。
另外提供了一些和是否有值相关联的方法,如orElse(Object)和orElse() 如果没有值则返回默认值。
因为Opetional是一个基于值的类,所以用于一些身份敏感的例如==、hashcode、synchronization等操作可能出错,因此应当避免在以上操作中使用。(这些操作使用的是对象的引用)
Optional用来接收一个方法可能返回null的情况,因为null可能造成错误。Optional类型的变量不可以为null,应当始终表示一个Optional实例。
- public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
值不为空执行action,为空执行emptyAction - public Optional<T> filter(Predicate<? super T> predicate)
如果有值返回满足predicate条件的optional否则返回空optional - public <U> Optional<U> map(Function<? super T, ? extends U> mapper)
如果有值返回mapper方法的结果,否则返回空optional。
map方法支持对值的后处理,不需要显式判断返回值的状态。例如以下的例子,遍历了uris流,选择没有处理过的,并使用这个uri创建Path对象,返回Optional(Path)实例
Optional<Path> p = uris.stream().filter(uri -> !isProcessedYet(uri)).findFirst().map(Paths::get);
- public <U> Optional<U> flatMap(Function<? super T, ? extends Optional<? extends U>> mapper)
如果有值返回返回操作Optional的mapper方法的结果,否则返回空optional。flatMap和map方法相似,但是flatMap处理的是本来就是Optional的数据,并且不会做额外的封包 - public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
如果有值返回optional,否则返回supplier的返回值 - public Stream<T> stream()
如果有值返回只包括这一个值的流,否则返回空流
网友评论