欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java8 Optional

程序员文章站 2022-03-04 10:52:38
...

Optional学习,常用方法学习,注意Optional是用final修饰的。

//Optional学习
        //of方法,为一个非null的对象T创建一个Optional
        //通过Objects方法返回对象,为空则抛NullPointerException
        Optional<String> optional=Optional.of("zhangsan");
        
        //ofNullable 方法,就是null也可以
        Optional<String> optional1=Optional.ofNullable("zhangsan");
        Optional<String> optional2=Optional.ofNullable(null);
        
        //isPresent 方法 如果值存在则返回true
        System.out.println(optional1.isPresent());//true
        System.out.println(optional2.isPresent());//false
        
        //get方法,返回对象T  如果没有抛NoSuchElementException
        System.out.println(optional.get());//zhangsan
        try {
            System.out.println(optional2.get());//NoSuchElementException
        } catch (Exception e) {
            e.printStackTrace();
        }
        //ifPresent 方法 如果存在就调用Consumer,不存在就不调用
        Consumer<String> c=str->System.out.println(str.toUpperCase());
        optional1.ifPresent(c);
        optional2.ifPresent(c);
        
        //orElse 如果有值则返回,为null则返回orElse中的内容
        System.out.println(optional1.orElse("空"));//zhangsan
        System.out.println(optional2.orElse("default"));//default
        
        //orElseGet 利用Supplier接口来返回
        Supplier<String> s=()->"空";
        System.out.println(optional1.orElseGet(s));//zhangsan
        System.out.println(optional2.orElseGet(s));//空
        
        //orElseThrow 为空抛异常
        Supplier<Exception> exceptionS=()->new NullPointerException();
        try {
            optional1.orElseThrow(exceptionS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            optional2.orElseThrow(exceptionS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //map方法  传入的是一个Function对原Optional进行操作,返回操作之后的Optional
        Function<String, String> mapper=str->str.toString().substring(0, 5);
        Optional<String> optional3= optional1.map(mapper);
        System.out.println(optional3.get()); //zhang
        
        //flatMap方法  与map方法的区别就在于这个方法Function的返回值只能是Optional而上面的那个返回值可以随意
        Function<String, Optional<String>> mapper1=str->Optional.ofNullable(str.toString().substring(0, 5));
        Optional<String> optional4= optional1.flatMap(mapper1);
        System.out.println(optional4.get());//zhang
        
        //filter 过滤
        Predicate<String> p=str->str.length()>10;
        Optional<String> optional5= optional1.filter(p);
        System.out.println(optional5.orElse("空"));//空

显示结果

true
false
zhangsan
java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:135)
	at collection.Test1.main(Test1.java:33)
ZHANGSAN
zhangsan
default
zhangsan
空
java.lang.NullPointerException
	at collection.Test1.lambda$2(Test1.java:52)
	at java.util.Optional.orElseThrow(Optional.java:290)
	at collection.Test1.main(Test1.java:59)
zhang
zhang
空
相关标签: Java8 Optional