Java8对null有更优雅的处理方式Optional类。html
Optional<Object> empty = Optional.empty();
EMPTY持有某个类型的空值结构,调用empty()返回的便是该实例java
Optional.ofapp
仍是返回空指针异常,不常用函数
Optional.ofNullable指针
为空,返回empty对象code
user = Optional.ofNullable(user).orElse(createUser()); user = Optional.ofNullable(user).orElseGet(() -> createUser());
当other不为空时,依然会执行括号中的代码htm
rElseGet函数并不会执行createUser()方法对象
value值为null时,直接抛一个异常出去blog
这两个函数,在函数体上没什么区别。惟一区别的就是入参,map函数所接受的入参类型为Function<? super T, ? extends U>,而flapMap的入参类型为Function<? super T, Optional<U>>。ci
在具体用法上,对于map而言: 若是User结构是下面这样的
public class User { private String name; public String getName() { return name; } }
这时候取name的写法以下所示
String city = Optional.ofNullable(user).map(u-> u.getName()).get();
对于flatMap而言: 若是User结构是下面这样的
public class User { private String name; public Optional<String> getName() { return Optional.ofNullable(name); } }
这时候取name的写法以下所示
String city = Optional.ofNullable(user).flatMap(u-> u.getName()).get();
Optional.ofNullable(user).ifPresent(u->{ // TODO: do something });
Optional<User> user1 = Optional.ofNullable(user).filter(u -> u.getName().length()<6);
filter 方法接受一个 Predicate 来对 Optional 中包含的值进行过滤,若是包含的值知足条件,那么仍是返回这个 Optional;不然返回 Optional.empty。