吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1136|回复: 0
收起左侧

[Java 转载] Java8 Optional类

[复制链接]
saz 发表于 2021-11-26 15:38
本帖最后由 saz 于 2021-11-26 15:41 编辑

Optional类

可能包含或者不包含非空值的容器对象。

如果一个值存在,isPresent()将返回true,并且使用get()方法获取值

JDK1.8 API

Modifier and Type Method and Description
static  Optional empty()  <br>返回一个空的 Optional实例。
boolean equals(Object obj)  <br/>指示某个其他对象是否等于此可选项。
Optional filter(Predicate predicate)  <br/>如果一个值存在,并且该值给定的谓词相匹配时,返回一个 Optional描述的值,否则返回一个空的  Optional
Optional flatMap(Function> mapper)  <br/>如果一个值存在,应用提供的 Optional映射函数给它,返回该结果,否则返回一个空的  Optional
T get()<br/>  如果 Optional中有一个值,返回值,否则抛出  NoSuchElementException
int hashCode()  <br/>返回当前值的哈希码值(如果有的话),如果没有值,则返回0(零)。
void ifPresent(Consumer consumer)  <br/>如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
boolean isPresent()  <br/>返回 true如果存在值,否则为 false
Optional map(Function mapper)  <br/>如果存在一个值,则应用提供的映射函数,如果结果不为空,则返回一个 Optional结果的  Optional
static  Optional of(T value)  <br/>返回具有 Optional的当前非空值的Optional。value是null,将抛异常
static  Optional ofNullable(T value) <br/> 返回一个 Optional指定值的Optional,如果非空,则返回一个空的  Optional
T orElse(T other)  <br/>返回值如果存在,否则返回 other
T orElseGet(Supplier other)  <br/>返回值(如果存在),否则调用 other并返回该调用的结果。
T orElseThrow(Supplier exceptionSupplier)  <br/>返回包含的值(如果存在),否则抛出由提供的供应商创建的异常。
String toString()  <br/>返回此可选的非空字符串表示,适用于调试。

Optional.empty();

/**
     * Optional.empty();
     */
@Test
public void test01(){
    Optional<Employee> emp = Optional.empty();
    Employee employee = emp.orElse(null);
    System.out.println(employee); // null
}

Optional.ofNullable()

Optional.of()

/**
     * Optional.ofNullable() && Optional.of()
     */
@Test
public void test02(){
    List<Employee> empOpt = Optional.ofNullable(employees)
        .orElseGet(()-> { return new ArrayList<>();});

    System.out.println(empOpt);

    Optional<Object> o = Optional.of(null); // throw NullPointerException
    System.out.println(o);
}

Optional map(Function fun)

 /**
     * Optional map(Function fun)
     */
@Test
public void test04(){
    Optional<String> name = Optional.of("   萧瑟  ");
    Optional<String> s = name.map(v -> v.trim());
    System.out.println(s.orElse("萧楚河"));
}

T orElseGet(Supplier sup)

/**
     * T orElseGet(Supplier sup)
     */
@Test
public void test05(){
    Optional<String> name = Optional.empty();
    System.out.println(name.isPresent()); // false
    System.out.println(name.orElseGet(()->"萧楚河")); // 萧楚河
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 12:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表