Optional用法

关于Optional

前言

本次向大家介绍下java Optional类

源码描述

官方的描述是这样的:
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.
Additional methods that depend on the presence or absence of a contained value are provided, such as orElse() (return a default value if value not present) and ifPresent() (execute a block of code if the value is present).
This is a value-based class; use of identity-sensitive operations (including reference equality (==), identity hash code, or synchronization) on instances of Optional may have unpredictable results and should be avoided.

大概的意思是:
这是一个容器对象,可能包含或不包含一个非空值,如果当前存在一个非空值,isPresent()方法将会返回true,并且调用get()方法,会得到该值。
提供了依赖于所包含值的存在与否的其他方法,例如orElse()(如果值不存在,则返回默认值)和ifPresent()(如果值存在,则执行代码块)。
这是一个值的基类;在Optional实例上使用标识敏感操作(包括引用相等(=)、标识哈希代码或同步)可能会产生不可预测的结果,应避免。

具体方法
1.empty()

静态方法返回一个空的Optional实例

package com.study.oth;

import java.util.Optional;

/**
 * @author bxz
 * @date 2021/11/25
 */
public class OptionalDemo {
    public static void main(String[] args) {
        Optional<Object> empty = Optional.empty();
    }
}

在这里插入图片描述

debug下看到通过empty()方法创建了一个不包含非空值的Optional实例。

2.filter
.filter(Predicate<? super T> predicate) 过滤在集合流式处理中用的比较多,当过滤条件不满足时返回一个空的及不包含非空值的Optional实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7taaYPX-1638356184606)(C:\Users\zhanghao\AppData\Roaming\Typora\typora-user-images\image-20211201153500759.png)]

3.flatMap
flatMap(Function<? super T,Optional> mapper) 转换操作

在这里插入图片描述

4.ifPresent
ifPresent(Consumer<? super T> consumer) 空值判断,如果不为空则执行操作 (无返回值)

在这里插入图片描述

5.isPresent()
isPresent() 判断当前Optional是否有值

在这里插入图片描述

6.map
map(Function<? super T,? extends U> mapper) 一对一映射

在这里插入图片描述

7.of
of(T value) 返回一个包含非空值的Optional实体,其中value不能为null否则抛空指针异常

在这里插入图片描述

8.ofNullable
ofNullable(T value) 返回一个包含非空值或不包含非空值的Optional实体,取决于传入参数value是否为null,这个方法用于value是否为空不确定的情况

在这里插入图片描述

9.orElse
orElse(T other) 获Optional中的值,如果Optional包含非空值,则返回该值,否则返回参数other传入的值

在这里插入图片描述

10.orElseGet
orElseGet(Supplier<? extends T> other) 也是获取Optional中的值,与orElse()不同的是,该方法传入一个函数,并将该函数的返回值作为Optional不包含非空值时返回的值

在这里插入图片描述

11.orElseThrow
orElseThrow(Supplier<? extends X> exceptionSupplier) 还是获取Optional中的非空值,不过当Optional包含非空值时抛异常

在这里插入图片描述

12.get
get() 获取Optional的非空值,如果Optional不包含非空值则抛异常

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值