java-基础-optional

optional<T>对象是一种包装器对象,要么包装了类型T的对象,要么没有包装任何对象。对于第一种情况,我们称这种值是存在的。0ptional<T>类型被当作一种更安全的方式,用来替代类型T的引用,这种引用要么引用某个对象,要么为 null

1. 创建

Optional<Employee> optionalTest = Optional.of(new Employee(10002, "optional 测试"));

Optional<Object> empty = Optional.empty();

Object o1 = empty.get();

//java.util.NoSuchElementException: No value present

Optional<Object> o = Optional.ofNullable(null);

Object o1 = o.get();

//java.util.NoSuchElementException: No value present

2. 获取

它在值不存在的情况下会产生一个可替代物,而只有在值存在的情况下才会使用这个值

2.1. 在没有任何匹配时,我们会希望使用某种默认值

可能是空字符串:String result = optionalString.orElse("");

还可以调用代码来计算默认值:

String result = optionalString.orElseGet(()->System.getProperty("myapp.default"));

2.2. 或者可以在没有任何值时抛出异常

String result = optionalString.orElseThrow(IllegalStateException::new);

3. 消费

3.1. ifPresent 方法会接受一个函数。如果可选值存在,那么它会被传递给该函数。否则,不会发生任何事情

optionalValue.ifPresent(v -> Process v)

3.2. 如果想要在可选值存在时执行一种动作,在可选值不存在时执行另一种动作

optionalValue.ifPresentOrElse(

V -> System.out.printLn("Found"+ v), ()-> logger.warning("NO match"));

4. 管道化

Optional<String> transformed = optionalString.map(String::toUpperCase)

如果optionalString为空,那么 transformed 也为空

我们将一个结果添加到列表中,

如果optionalValue 为空,则什么也不会发生。

Optional<String> transformed = optionalString
.filter(s-> s.length()>= 8).map(String::tolUpper Case)

产生一个Optional,如果当前的 optional的值满足给定的谓词条件,那么所产生的optional 的值就是当前 Optional 的值;否则,产生一个空 optional

Optional<T> or(Supplier<? extends optional<? exatends T>> supplier) 9

如果当前 optional 不为空,则产生当前的 optional;否则由 supplier产生一个optional

5. 收集

map(Function f)

flatMap(Function mapper)

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值