java8 Optional 使用模式

本文详细介绍了Java Optional类的常见用法,包括创建Optional对象、使用map、flatMap和filter操作,以及如何处理缺失值。通过示例展示了Optional在避免空指针异常和增强代码可读性方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 声明一个空的Optional

Optional<Integer> obj = Optional.empty(); 

2. 依据一个非空值创建Optional

Optional<Integer> object = Optional.of(1);

3. 可接受nullOptional

Optional<Integer> object = Optional.ofNullable(1); 

4. 使用 map Optional 对象中提取和转换值

 Optional<User> user = Optional.ofNullable(new User());
 Optional<String> userName = user.map(User::getUserName);

 class User {
        private String userName;
        private Integer age;

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }

5. 使用 flatMap 链接 Optional 对象

 Optional<User> user = Optional.ofNullable(new User());
 String color = user.flatMap(User::getApple)
                .map(Apple::getColor).
                orElse("");
 class User {
        private String userName;
        private Integer age;
        private Optional<Apple> apple;


        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        public Optional<Apple> getApple() {
            return apple;
        }

        public void setApple(Optional<Apple> apple) {
            this.apple = apple;
        }
    }

    class Apple {
        private String color;

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }
    }

6. 使用 filter 剔除特定的值

 Optional<User> userName = user.filter(u -> "xiaoming".equals(u.userName));

O

Optional类的方法

1. empty

返回一个空的 Optional 实例

2. filter

如果值存在并且满足提供的谓词,就返回包含该值的 Optional 对象;否则返回一个空的 Optional 对象

3. flatMap

如果值存在,就对该值执行提供的 mapping 函数调用,返回一个 Optional 类型的值,否则就返

回一个空的 Optional 对象

4. get

如果该值存在,将该值用 Optional 封装返回,否则抛出一个 NoSuchElementException 异常

5. ifPresent

如果值存在,就执行使用该值的方法调用,否则什么也不做

6. isPresent

如果值存在就返回 true,否则返回 false

7. map

如果值存在,就对该值执行提供的 mapping 函数调用

8. of

将指定值用 Optional 封装之后返回,如果该值为 null,则抛出一个 NullPointerException 异常

9. ofNullable

将指定值用 Optional 封装之后返回,如果该值为 null,则返回一个空的 Optional 对象

10. orElse

如果有值则将其返回,否则返回一个默认值

11. orElseGet

如果有值则将其返回,否则返回一个由指定的 Supplier 接口生成的值

12. orElseThrow

如果有值则将其返回,否则抛出一个由指定的 Supplier 接口生成的异常

《手掌与疾病》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古智云开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值