1 重点:
1.1 本节demo中的Optional是java8中Optional不是guava中的(guava中也有Optional)
1.2 demo1三种创建Optional的方式(为空对象,非空对象,任意对象)
1.3 demo2使用Optional的方法(map,filter,flatMap,ifPresent特性)
1.4 demo3ofNullable方法dmeo(当Optional对象为空时不报错)
2 demo1 之三种创建Optional的方式
/** * 1 三种创建Optional方式 */ //1.1 创建为空的Optonal对象 Optional.empty(); //1.2 创建非null值的Optional对象,如果为null编译期报错 Optional.of("zhangyy"); //1.3 使用任意值创建Optional对象,可以点进去ofNullable方法看看 //Optional optional = Optional.ofNullable(null); Optional optional = Optional.ofNullable("zhangxiaoxi");
3 demo2 之Optional的使用方式
/** * 2 Optional的使用方式 */ //2.1 判断Optional是否引用缺失的方法(建议不使用) optional.isPresent(); //2.2 当optional存在(optional对象非null)时执行 // 类似方法 map filter flatMap optional.ifPresent(System.out::println); //2.3 当optional引用缺失时(optional对象为null)执行 optional.orElse("引用缺失"); optional.orElseGet(()->{ System.out.println("自定义引用缺失"); return "自定义引用缺失"; }); optional.orElseThrow(()->{ return new RuntimeException("返回一个异常!"); }); }
4 demo3 之验证为null的情况(ofNullable不报错)
demo:
/** * 测试stream 为null的情况 * @param list */ public static void stream(List<String> list){ System.out.println("Favorite"); //list.stream().forEach(System.out::println); Optional.ofNullable(list) //如果不为null,构建流 .map(List::stream) //否则,构建出一个空的流 .orElseGet(Stream::empty) .forEach(System.out::println); } public static void main(String [] args){ stream(null); }
打印结果:
Favorite
Process finished with exit code 0
正是受到Guava的启发,Java8将Optiona类做为一,个新特性引入进Java8的类库。