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
ToLongFunction
ToDoubleFunction
IntFunction
LongFunction
DoubleFunction
断言型接口
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);