Java8 Optional
程序员文章站
2022-03-04 10:52:38
...
Optional学习,常用方法学习,注意Optional是用final修饰的。
//Optional学习
//of方法,为一个非null的对象T创建一个Optional
//通过Objects方法返回对象,为空则抛NullPointerException
Optional<String> optional=Optional.of("zhangsan");
//ofNullable 方法,就是null也可以
Optional<String> optional1=Optional.ofNullable("zhangsan");
Optional<String> optional2=Optional.ofNullable(null);
//isPresent 方法 如果值存在则返回true
System.out.println(optional1.isPresent());//true
System.out.println(optional2.isPresent());//false
//get方法,返回对象T 如果没有抛NoSuchElementException
System.out.println(optional.get());//zhangsan
try {
System.out.println(optional2.get());//NoSuchElementException
} catch (Exception e) {
e.printStackTrace();
}
//ifPresent 方法 如果存在就调用Consumer,不存在就不调用
Consumer<String> c=str->System.out.println(str.toUpperCase());
optional1.ifPresent(c);
optional2.ifPresent(c);
//orElse 如果有值则返回,为null则返回orElse中的内容
System.out.println(optional1.orElse("空"));//zhangsan
System.out.println(optional2.orElse("default"));//default
//orElseGet 利用Supplier接口来返回
Supplier<String> s=()->"空";
System.out.println(optional1.orElseGet(s));//zhangsan
System.out.println(optional2.orElseGet(s));//空
//orElseThrow 为空抛异常
Supplier<Exception> exceptionS=()->new NullPointerException();
try {
optional1.orElseThrow(exceptionS);
} catch (Exception e) {
e.printStackTrace();
}
try {
optional2.orElseThrow(exceptionS);
} catch (Exception e) {
e.printStackTrace();
}
//map方法 传入的是一个Function对原Optional进行操作,返回操作之后的Optional
Function<String, String> mapper=str->str.toString().substring(0, 5);
Optional<String> optional3= optional1.map(mapper);
System.out.println(optional3.get()); //zhang
//flatMap方法 与map方法的区别就在于这个方法Function的返回值只能是Optional而上面的那个返回值可以随意
Function<String, Optional<String>> mapper1=str->Optional.ofNullable(str.toString().substring(0, 5));
Optional<String> optional4= optional1.flatMap(mapper1);
System.out.println(optional4.get());//zhang
//filter 过滤
Predicate<String> p=str->str.length()>10;
Optional<String> optional5= optional1.filter(p);
System.out.println(optional5.orElse("空"));//空
显示结果
true
false
zhangsan
java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at collection.Test1.main(Test1.java:33)
ZHANGSAN
zhangsan
default
zhangsan
空
java.lang.NullPointerException
at collection.Test1.lambda$2(Test1.java:52)
at java.util.Optional.orElseThrow(Optional.java:290)
at collection.Test1.main(Test1.java:59)
zhang
zhang
空