Optional的使用

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 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());
    }

你可能感兴趣的:(Java,java)