Optional类方法使用详解

Optional类方法使用详解

1.对象创建

1.empty()

创建空的Optional的对象,不同于new一个对象,该对象不会有空指针异常

<T> Optional<T> empty()
//创建空的Optional的对象,不同于new一个对象,该对象不会有空指针异常
Optional<String> empty = Optional.empty();
2.of()

初始化一个Optional的对象,该方法必须传入非null对象,否则会抛空指针异常

<T> Optional<T> of(T value)
//初始化一个Optional的对象,该方法必须传入非null对象,否则会抛空指针异常
Optional<String> empty1 = Optional.of("1");
Optional<List<String>> empty3 = Optional.of(Arrays.asList("1","2"));
3.ofNullable()

初始化一个Optional的对象,该方法可以存在null,如果为null则创建一个empty()的空Optional对象

<T> Optional<T> ofNullable(T value)
//初始化一个Optional的对象,该方法可以存在null,如果为null则创建一个empty()的空Optional对象
Optional<String> empty2 = Optional.ofNullable(null);

2.取值方法

1.isPresent()

判断Optional对象是否有值,有值为true

boolean isPresent()
Optional<String> empty = Optional.of("1");
//判断Optional对象是否有值,有值为true
boolean present = empty.isPresent(); 
2.isEmpty()

判断是否为空对象 jdk11方法

boolean isEmpty()
Optional<String> empty2 = Optional.ofNullable(null);
//判断是否为空对象 jdk11方法
boolean present1 = empty2.isEmpty();
3.get()

取值,如果是空Optional对象,抛出NoSuchElementException 异常

T get()
Optional<String> empty = Optional.of("1");
//取值,如果是空Optional对象,抛出NoSuchElementException 异常
String str = empty.get();   
4.orElse()

取值,如果是空Optional对象或null,取指定默认值

T orElse(T other)
Optional<String> empty = Optional.empty();
Optional<String> empty1 = Optional.of("1");       
Optional<String> empty2 = Optional.ofNullable(null);
//取值,如果是空Optional对象或null,取指定默认值
String str2 = empty.orElse("2"); //2
String str3 = empty2.orElse("2"); //2
String str4 = empty1.orElse("2"); //1 
5.orElseGet()

取值,如果是空Optional对象或null,取指定默认值,不同于orElse,该方法传入的是Supplier函数

T orElseGet(Supplier<? extends T> other)
Optional<String> empty = Optional.ofNullable(null);
//取值,如果是空Optional对象或null,取指定默认值,不同于orElse,该方法传入的是Supplier函数
String str5 = empty.orElseGet(() -> "11" + "222"); //11222
5.orElseThrow()

取值,如果是空Optional对象或null,抛指定异常

T orElseGet(Supplier<? extends T> other)
Optional<String> empty = Optional.ofNullable(null);
//取值,如果是空Optional对象或null,抛指定异常
empty.orElseThrow(() -> new Exception("aaa"));

3.处理方法

1.ifPresent()

值操作,如果有值,则处理该值,是空Optional对象或null不处理

void ifPresent(Consumer<? super T> consumer)
Optional<String> empty = Optional.ofNullable(null);
//值操作,如果有值,则处理该值,是空Optional对象或null不处理
empty.ifPresent(item -> System.out.println("Optional字符串:" + item));
2.filter()

过滤数据

Optional<T> filter(Predicate<? super T> predicate)
Optional<String> empty = Optional.of("1"); 
//过滤数据
Optional<String> filterOpt = empty.filter(item -> "1".equals(item));
filterOpt.ifPresent(item -> System.out.println("filterOpt字符串:" + item));
3.map()

转换处理

<U> Optional<U> map(Function<? super T, ? extends U> mapper)
Optional<String> empty = Optional.of("1");
//转换处理
Optional<Integer> mapOpt = empty.map(item -> Integer.parseInt(item) + 1);
mapOpt.ifPresent(item -> System.out.println("mapOpt字符串:" + item));
4.flatMap()

转换处理,返回的是Optional对象,类似Stream的map和flatMap关系

<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)
Optional<List<String>> empty = Optional.of(Arrays.asList("1","2"));
//转换处理,返回的是Optional对象,类似Stream的map和flatMap关系
Optional<String> flatMapOpt = empty.flatMap(item -> item.stream().findFirst());
flatMapOpt.ifPresent(item -> System.out.println("flatMapOpt字符串:" + item));

测试示例

    public static void main(String[] args) throws Exception {
        //创建空的Optional的对象,不同于new一个对象,该对象不会有空指针异常
        Optional<String> empty = Optional.empty();
        //初始化一个Optional的对象,该方法必须传入非null对象,否则会抛空指针异常
        Optional<String> empty1 = Optional.of("1");
        Optional<List<String>> empty3 = Optional.of(Arrays.asList("1","2"));
        //初始化一个Optional的对象,该方法可以存在null,如果为null则创建一个empty()的空Optional对象
        Optional<String> empty2 = Optional.ofNullable(null);
        //判断Optional对象是否有值,有值为true
        boolean present = empty1.isPresent();
        //判断是否为空对象 jdk11方法
        boolean present1 = empty2.isEmpty();
        //取值,如果是空Optional对象,抛出NoSuchElementException 异常
        String str = empty1.get();
        //取值,如果是空Optional对象或null,取指定默认值
        String str2 = empty.orElse("2"); //2
        String str3 = empty2.orElse("2"); //2
        String str4 = empty1.orElse("2"); //1
        //取值,如果是空Optional对象或null,取指定默认值,不同于orElse,该方法传入的是Supplier函数
        String str5 = empty2.orElseGet(() -> "11" + "222"); //11222
        //取值,如果是空Optional对象或null,抛指定异常
        empty2.orElseThrow(() -> new Exception("aaa"));
        //值操作,如果有值,则处理该值,是空Optional对象或null不处理
        empty2.ifPresent(item -> System.out.println("Optional字符串:" + item));
        //过滤数据
        Optional<String> filterOpt = empty1.filter(item -> "1".equals(item));
        filterOpt.ifPresent(item -> System.out.println("filterOpt字符串:" + item));
        //转换处理
        Optional<Integer> mapOpt = empty1.map(item -> Integer.parseInt(item) + 1);
        mapOpt.ifPresent(item -> System.out.println("mapOpt字符串:" + item));
        //转换处理,返回的是Optional对象,类似Stream的map和flatMap关系
        Optional<String> flatMapOpt = empty3.flatMap(item -> item.stream().findFirst());
        flatMapOpt.ifPresent(item -> System.out.println("flatMapOpt字符串:" + item));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值