函数式编程(JAVA)——Optional类

函数式编程(JAVA)——Optional类

概述

我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。 尤其是对象中的属性还是一个对象的情况下。这种判断会更多。而过多的判断语句会让我们的代码显得臃肿不堪。所以在JDK8中引入了Optional,养成使用Optional的习惯后你可以写出更优雅的代码来避免空指针异常。

Optional类的常用操作

该类的其实很简单,整体字段属性方法如下图:
在这里插入图片描述

下述所有测试代码源码地址:https://gitee.com/ArnoldSu/functionalProgramming.git

of

返回一个Optional对象并且参数必须不能为空,如果为空则报错NullPointerException。

	 /**
     * description Optional of 返回一个Optional对象。(返回一个Optional并且参数必须不能为空,如果为空则报错NullPointerException)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void ofTest() {
        Optional<User> userOptional = Optional.of(initUser);
        System.out.println(userOptional);
        Optional<User> nullUserOptional = Optional.of(null);
        System.out.println(nullUserOptional);
    }

ofNullable

返回一个Optional对象。(返回一个Optional并且参数可以为null)。

		/**
     * description Optional ofNullable 返回一个Optional对象。(返回一个Optional并且参数可以为null)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void ofNullableTest() {
        Optional<User> userOptional = Optional.ofNullable(initUser);
        System.out.println(userOptional);
        Optional<User> nullUserOptional = Optional.ofNullable(null);
        System.out.println(nullUserOptional);
    }

empty

返回一个Optional对象。(返回一个Optional并且参数可以为null)。

	/**
     * description Optional empty 返回一个空Optional对象。
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void emptyTest() {
        System.out.println(Optional.empty());
    }

get

返回Optional对象中的值。(为null 则会报错NoSuchElementException)。

	/**
     * description Optional get 返回Optional对象中的值。(为null 则会报错NoSuchElementException)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void getTest() {
        Optional<User> userOptional = Optional.ofNullable(initUser);
        System.out.println(userOptional.get());
        Optional<User> nullUserOptional = Optional.ofNullable(null);
        System.out.println(nullUserOptional.get());
    }

ifPresent

如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。(为null 则不会进行输出)。

		/**
     * description Optional ifPresent 如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。(为null 则不会进行输出)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void ifPresentTest() {
        Optional<User> userOptional = Optional.ofNullable(initUser);
        userOptional.ifPresent(user -> System.out.println(user.getName()));
        Optional<User> nullUserOptional = Optional.ofNullable(null);
        nullUserOptional.ifPresent(user -> System.out.println(user.getName()));
    }

orElse

如果存在值,则使用该值调用指定的使用者,否则提供一个调用者指定的值返回。(可以理解为没有值给定一个默认值)。

	/**
     * description Optional orElse 如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。(为null 则new 一个User)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void orElseTest() {
        Optional<User> nullUserOptional = Optional.ofNullable(null);
        System.out.println(nullUserOptional.orElse(new User()));
    }

orElseGet

如果存在值,则使用该值调用指定的使用者,否则提供一个调用者指定的值返回。(可以理解为没有值给定一个默认值)。

		/**
     * description Optional orElseGet 如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。(为null 则new 一个User)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void orElseGetTest() {
        Optional<User> nullUserOptional = Optional.ofNullable(null);
        System.out.println(nullUserOptional.orElseGet(User::new));
    }

orElse和OrElseGet的区别:https://blog.csdn.net/Amandazh/article/details/117109855

orElseThrow

如果存在值,则使用该值调用指定的使用者,否则抛出由调用者创建的异常抛出。(可以理解为没有值抛出异常)。

/**
     * description Optional orElseThrow  如果存在值,则使用该值调用指定的使用者,否则抛出由调用者创建的异常抛出。(可以理解为没有值抛出异常)
     *
     * @param
     * @return void
     * @author Arnold
     * @date 2022/6/7
     **/
    @Test
    public void orElseThrowThrow() {
        Optional<User> userOptional = Optional.ofNullable(initUser);
        System.out.println(userOptional.orElseThrow(RuntimeException::new));
        Optional<User> nullUserOptional = Optional.ofNullable(null);
        nullUserOptional.orElseThrow(RuntimeException::new);
    }

其他的一些操作

方法名称作用
filter过滤操作可参考Stream的filter方法
flatMap过滤操作可参考Stream的flatMap方法
isPresent判断Optional有值true无值false
map过滤操作可参考Stream的map方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值