Java 8系列之Optional

Java 8系列:
Java 8系列之Lambda表达示
Java 8系列之StreamApi
Java 8系列之Collector
Java 8系列之Optional
Java 8系列之Future

一.创建Optional对象

  1. 声明一个空的Optional
        //1.empty:返回一个空的 Optional 实例
        Optional<Student> optStudent = Optional.empty();
  1. 依据一个值创建Optional
	 Student student1 = new Student("mm", 22, 78, Student.Status.Busy);
	 Student student2 = null;
	//of:将指定值用 Optional 封装之后返回,如果该值为 null ,则抛出一个 NullPointerException
	 Optional of = Optional.of(student2);
	 System.out.println(of中放空值会报NullPointerException:”+of);
  1. 可接受null的Optional
		//ofNullable:将指定值用 Optional 封装之后返回,如果该值为 null ,则返回一个空的 Optional 对象
		Optional ofNullable = Optional.ofNullable(student2);
		System.out.println(“ofNullable中可放空值:”+ofNullable);

二. Optional类的基本方法

  1. filter:如果值存在并且满足提供的谓词,就返回包含该值的 Optional 对象;否则返回一个空的Optional 对象
        Optional<Student> optStu = Optional.of(student1);
        Optional<Student> optionalStudent = optStu.filter(s -> "kk".equals(s.getName()));
        System.out.println("filter后:"+optionalStudent);
  1. flatMap:如果值存在,就对该值执行提供的 mapping 函数调用,返回一个 Optional 类型的值,否则就返回一个空的 Optional 对象
  2. map:如果值存在,就对该值执行提供的 mapping函数调用
  3. orElse:如果有值则将其返回,否则返回一个默认值
        String stuName = optionalStudent.map(s -> s.getName()).orElse("kdkdkdk");
        System.out.println("学生姓名:"+stuName);
  1. get:如果该值存在,将该值用 Optional 封装返回,否则抛出一个 NoSuchElementException 异常,是这些方法中最简单但又最不安全的方法
     System.out.println(optionalStudent.get());
  1. ifPresent(Consumer<? super T>):让你能在变量值存在时执行一个作为参数传入的方法,否则就不进行任何操作
      Optional.of(student1).filter(s ->
              "mm".equals(s.getName()))
              .ifPresent(x -> System.out.println("ok"));

isPresent 如果值存在就返回 true ,否则返回 false

	 System.out.println("isPresent:"+optionalStudent.isPresent());
  1. orElseGet 如果有值则将其返回,否则返回一个由指定的 Supplier 接口生成的值orElseGet(Supplier<? extends T> other) 是 orElse 方法的延迟调用版, Supplier方法只有在 Optional 对象不含值时才执行调用。如果创建默认值是件耗时费力的工作,你应该考虑采用这种方式(借此提升程序的性能),或者你需要非常确定某个方法仅在Optional 为空时才进行调用,也可以考虑该方式(这种情况有严格的限制条件)
  2. orElseThrow 如果有值则将其返回,否则抛出一个由指定的 Supplier 接口生成的异常

猜你喜欢

转载自blog.csdn.net/qq_39172525/article/details/85939920