美文网首页
六号线晚报0614

六号线晚报0614

作者: z0nk1n | 来源:发表于2018-06-14 16:30 被阅读0次

    天气: 风力:

    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()
      如果有值返回只包括这一个值的流,否则返回空流

    相关文章

      网友评论

          本文标题:六号线晚报0614

          本文链接:https://www.haomeiwen.com/subject/wjryeftx.html