import java.util.Optional;
public class optionalDemo {
public static void main(String[] args) {
demo();
}
/**
* Optional容器类(JDK1.8)
* Optional是Java8引入的一个很有趣的特性,主要解决的问题是臭名昭著的 ·空指针异常·
*
* 这是一个可以为null的容器对象。如果值存在则isPresent(方法会返回true,调用get()方法会返回该对象。
*
* of:为非null的值创建一个Optional.
*
* ofNullable:为指定的值创建一-个Optional, 如果指定的值为null,则返回一个空的Optional。
*
* isPresent:如果值存在返回true,否则返回false。
*
* get:如果Optional有值则将其返回,否则抛出NoSuchElementException。
*
* ifPresent:如果Optional实例有值则为其调用consumer,否则不做处理
*
* orElse:如果有值则将其返回,否则返回指定的其它值。
*
* orElseGet:orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值。
* orElseGet方法可以接受Supplier接口的实现用来生成默认值。
*
* orElseThrow:如果有值则将其返回,否则抛出supplier接口创建的异常。
*
* map:如果有值,则对其执行调用mapping函数得到返回值。
* 如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
*
* flatMap:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。
* flatMap与 map (Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。
*
* filter:如果有值且满足断言条件返回包含该值的optional,否则返回空optional
*/
public static void demo(){
//创建optional的方式,第3种更严谨
Optional<String> optional = Optional.of("bin");
Optional<String> optional2 = Optional.empty();
Optional<String> optional3 = Optional.ofNullable("bin");//此处传入的为null就会调用empty()方法
//判断有无值,值存在返回true,否则返回false
boolean present1 = optional.isPresent();
System.out.println(present1);
boolean present2 = optional2.isPresent();
System.out.println(present2);
//获取容器中的值
System.out.println(optional.get());
//有值就按照定义的方法执行,否则就什么也不做
optional.ifPresent(v-> System.out.println("value:"+v));
//有值就返回值,否则返回一个固定的值
String isV1 = optional.orElse("无值");
System.out.println(isV1);
String isV2 = optional2.orElse("无值");
System.out.println(isV2);
//接受方法的方法的返回值
System.out.println(optional2.orElseGet(() -> "lsq"));
//有值就返回,否则就抛出异常
// try {
// optional2.orElseThrow(()->new Exception());
// } catch (Exception e) {
// e.printStackTrace();
// }
//map 映射后返回optional
Optional<String> optional4 = optional.map((v) -> v.toUpperCase());
System.out.println(optional4.get());
//flatMap与map不同的是不会封装成optional
Optional<String> optional5 = optional.flatMap((v) -> Optional.of(v.toUpperCase() + "123"));
System.out.println(optional5.get());
//filter 过滤
Optional<String> optional6 = optional.filter((v)->v.length()>=4);
System.out.println(optional6.orElse("这个值的长度小于4"));
}
}
铂西学习日记---optional容器类
最新推荐文章于 2022-04-06 17:07:32 发布