Java Optional

Optional 是 Java 8 中引入的一个类,用于处理可能为空的值。它提供了一种优雅的方式来避免空指针异常,并在值存在时进行处理。下面是一些 Optional 的常用方法:

  1. 创建 Optional 对象:

    • Optional.empty(): 创建一个空的 Optional 对象。
    • Optional.of(value): 创建一个包含指定非空值的 Optional 对象。如果 value 为 null,则会抛出 NullPointerException。
    • Optional.ofNullable(value): 创建一个 Optional 对象,如果 value 为 null,则创建一个空的 Optional 对象;否则,创建一个包含指定值的 Optional 对象。
  2. 判断值是否存在:

    • isPresent(): 如果 Optional 对象包含非空值,则返回 true;否则返回 false。
    • isEmpty(): 如果 Optional 对象为空,则返回 true;否则返回 false。
  3. 获取值:

    • get(): 获取 Optional 对象中的值。如果 Optional 对象为空,则会抛出 NoSuchElementException 异常。
  4. 条件处理:

    • ifPresent(Consumer<? super T> consumer): 如果 Optional 对象中有值,则执行指定的操作。
    • ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction): 如果 Optional 对象中有值,则执行指定的操作;否则执行指定的空操作。
  5. 值转换:

    • map(Function<? super T,? extends U> mapper): 如果 Optional 对象中有值,则将其通过指定的映射函数转换为另一个值,并返回一个包含转换后值的 Optional 对象。
    • flatMap(Function<? super T,Optional<U>> mapper): 如果 Optional 对象中有值,则将其通过指定的映射函数转换为另一个 Optional 对象,并返回该 Optional 对象。
  6. 默认值:

    • orElse(T other): 如果 Optional 对象为空,则返回指定的默认值 other。
    • orElseGet(Supplier<? extends T> supplier): 如果 Optional 对象为空,则使用指定的供应函数获取一个默认值。
    • orElseThrow(Supplier<? extends X> exceptionSupplier): 如果 Optional 对象为空,则抛出由指定的异常供应函数生成的异常。

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        String name = "John";
        Optional<String> optionalName = Optional.of(name);
        
        // 判断值是否存在
        System.out.println("Is value present? " + optionalName.isPresent());
        
        // 获取值
        String retrievedName = optionalName.get();
        System.out.println("Retrieved value: " + retrievedName);
        
        // 条件处理
        optionalName.ifPresent(value -> System.out.println("Value is present: " + value));
        
        // 值转换
        Optional<Integer> nameLength = optionalName.map(String::length);
        nameLength.ifPresent(length -> System.out.println("Name length: " + length));
        
        // 默认值
        String defaultValue = optionalName.orElse("Default");
        System.out.println("Default value: " + defaultValue);
        
        String fallbackValue = optionalName.orElseGet(() -> {
            // 可以执行复杂的逻辑来获取默认值
            return "Fallback";
        });
        System.out.println("Fallback value: " + fallbackValue);
        
        // 抛出异常
        String retrievedName2 = optionalName.orElseThrow(() -> new RuntimeException("Value not present"));
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值