Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。

Optional方法

Optional.of(T t) : 创建一个 Optional 实例
Optional.empty() : 创建一个空的 Optional 实例
Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
isPresent() : 判断是否包含值 
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
flatMap(Function mapper):与 map 类似,要求返回值必须是Optional

Java系统内置那些函数接口

消费型接口:

Conusmer
void accept(T t);
BiConusmer<T,U>
void accept(T t,U u);//增加一种入参类型

供给型接口

Supplier
void get();

函数型接口

Function<T ,R>
R apply(T t);
UnaryOperator
T apply(T t);//入参与返回值类型一致
BiFunction <T ,U,R>
R apply(T t,U u);//增加一个参数类型
BinaryOperator
T apply(T t1,T t2);//l两个相同类型入参与同类型返回值
ToIntFunction//限定返回int
ToLongFunction//限定返回long
ToDoubleFunction//限定返回double
IntFunction//限定入参int,返回泛型R
LongFunction//限定入参long,返回泛型R
DoubleFunction//限定入参double,返回泛型R

断言型接口

Predicate
boolean test(T t);

Function

  public static void main(String[] args) {
      Function<String,Integer> str=String ::length;
      System.out.println(str.apply("hello"));
}

判断参数是否为空

  public static void main(String[] args) {
      /**
       * ofNullable(可以传递一个空对象)
       * Of(不可以传递空对象)
       */
      String name=null;
      //返回false为null
      boolean present = Optional.ofNullable(name).isPresent();
      System.out.println(present);

//        Optional<String> name2 = Optional.of(name);
  }

参数为空可以设定默认值

   Optional.ofNullable(name).orElse("默认值");

参数实现过滤

String name="";

      boolean present = Optional.ofNullable(name).filter(s -> {
          if (s.equals("")) {
              return false;
          }
          return true;
      }).isPresent();
      System.out.println(present);

实战

      String userName="null";
//        if (userName!=null){
//
//        }
//        boolean present = Optional.ofNullable(userName).isPresent();
//        //present 为true说明有 值
//        if (present) {
//            System.out.println("有值");
//        }
      //过滤null,完事打印
       Optional.ofNullable(userName).ifPresent(System.out :: println);