【Java】详解Jdk8 Optional

说明

Java 8 引入了 Optional 类,它是一个容器对象,可以包含一个非空对象或者为空。Optional 类的目的是为了解决空指针异常的问题,使代码更加健壮和优雅。

Optional 类提供了一系列方法来处理包含的对象,常用的方法包括:

  • ofNullable(T value):将一个可能为 null 的对象包装成 Optional 对象。
  • isPresent():判断 Optional 对象是否包含非空值。
  • get():获取 Optional 对象中的值,如果值为空则抛出 NoSuchElementException 异常。
  • orElse(T other):获取 Optional 对象中的值,如果值为空则返回指定的默认值。
  • orElseGet(Supplier<? extends T> other):获取 Optional 对象中的值,如果值为空则使用指定的 Supplier 函数生成默认值。
  • orElseThrow(Supplier<? extends X> exceptionSupplier):获取 Optional 对象中的值,如果值为空则抛出指定的异常。
  • map(Function<? super T, ? extends U> mapper):对 Optional 对象中的值进行映射操作,返回一个新的 Optional 对象。
  • flatMap(Function<? super T, Optional<U>> mapper):对 Optional 对象中的值进行映射操作,返回一个新的 Optional 对象,并将结果展开。

示例

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        String name = null;

        // 使用 ofNullable 方法包装可能为 null 的对象
        Optional<String> optionalName = Optional.ofNullable(name);

        // 判断 Optional 对象是否包含非空值
        if (optionalName.isPresent()) {
            // 获取 Optional 对象中的值
            String value = optionalName.get();
            System.out.println("Name: " + value);
        } else {
            System.out.println("Name is empty");
        }

        // 使用 orElse 方法获取 Optional 对象中的值,如果值为空则返回默认值
        String defaultValue = optionalName.orElse("Unknown");
        System.out.println("Default Name: " + defaultValue);

        // 使用 orElseGet 方法获取 Optional 对象中的值,如果值为空则使用 Supplier 函数生成默认值
        String generatedValue = optionalName.orElseGet(() -> generateName());
        System.out.println("Generated Name: " + generatedValue);

        // 使用 orElseThrow 方法获取 Optional 对象中的值,如果值为空则抛出异常
        try {
            String result = optionalName.orElseThrow(() -> new RuntimeException("Name is empty"));
            System.out.println("Result: " + result);
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
        }

        // 使用 map 方法对 Optional 对象中的值进行映射操作
        Optional<String> mappedName = optionalName.map(n -> n.toUpperCase());
        if (mappedName.isPresent()) {
            String mappedValue = mappedName.get();
            System.out.println("Mapped Name: " + mappedValue);
        }

        // 使用 flatMap 方法对 Optional 对象中的值进行映射操作,并将结果展开
        Optional<String> flatMappedName = optionalName.flatMap(n -> Optional.ofNullable(n.toUpperCase()));
        if (flatMappedName.isPresent()) {
            String flatMappedValue = flatMappedName.get();
            System.out.println("Flat Mapped Name: " + flatMappedValue);
        }
    }

    private static String generateName() {
        return "Generated";
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值