Optional的使用

本文介绍了Java17中的Optional类及其关键方法,如empty()、of()、ofNullable()、get()、ifPresent()、filter()和map(),着重讲解了如何正确处理Optional对象的空值和内容操作。
摘要由CSDN通过智能技术生成

jdk17测试

1、empty方法

    //建议常用
    @Test
    public void empty(){
        //返回一个Optional容器对象,而不是null
        Optional<Object> optional = Optional.empty();
        System.out.println(optional.isPresent());//false
        System.out.println(optional.isEmpty()); //true
    }

2、of方法

    //不建议使用 能确定值不为空的情况下可以使用
    @Test
    public void of(){
        String value = null;
//        Optional<String> optional = Optional.of(value);//报错 java.lang.NullPointerException
        String value1 = "123";
        Optional<String> optional1 = Optional.of(value1);
        System.out.println(optional1.isPresent());//true
//        System.out.println(optional1.isEmpty()); //false
    }

3、ofNullable方法

    //推荐使用
    @Test
    public void ofNullable(){
        String value = null;
        Optional<Object> optional = Optional.ofNullable(value);
        System.out.println(optional.isPresent());//false
        System.out.println(optional.isEmpty()); //true
		
		String value1 = "123";
        Optional<Object> optional1 = Optional.ofNullable(value1);
        System.out.println(optional1.get());//123
        System.out.println(optional1.isPresent());//true
        System.out.println(optional1.isEmpty()); //false
    }

4、get方法

       //尽量别用
    @Test
    public void get(){
        Optional<Object> optional = Optional.ofNullable(null);
//        System.out.println(optional1.get());//java.util.NoSuchElementException: No value present
        if(optional.isPresent()){
            System.out.println(optional.get());
        }
        System.out.println(optional.orElse("123"));//123 orElse: 不管Optional对象为空或者非空都会执行传入的这个参数
        //推荐orElseGet 减少执行代价
        System.out.println(optional.orElseGet(() -> "1234"));//1234 orElseGet: 只要Optional对象为空的时候才会执行Supplier里面的这个方法
//        optional.orElseThrow(() -> new RuntimeException("not found"));
    }

5、ifPresent方法

    //判断Optional中是否有值,返回boolean,某些情况下很有用,但尽量不要用在if判断体中
    @Test
    public void isPresent(){
        Optional<String> optional = Optional.ofNullable(null);
        optional.ifPresent(str -> System.out.println(str));
        optional.ifPresentOrElse(str -> System.out.println(str), () -> System.out.println("not found"));
    }

6、filter方法

    @Test
    public void filter(){
        Optional<String> optional = Optional.ofNullable("123");
        Optional<String> optional1 = optional.filter(str -> str.equals("123"));
        System.out.println(optional1.isPresent());//false

        Optional<String> optional2 = optional.filter(str -> str.equals("1234"));
        System.out.println(optional2.isPresent());//true
    }

7、map方法

    @Test
    public void map(){
        Optional<String> optional = Optional.ofNullable("123");
        Optional<Long> optionalLong = optional.map(Long::parseLong);
        System.out.println(optionalLong.isPresent());
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值