public static void main(String[] args) {
// 构造方法:
// Optional.empty(); 构造一个空的Optional对象,Optional里面的value值是null
// Optional.of(value); 根据传入的value值构造一个Optional对象,如果传入的值是null,那么会抛出异常
// Optional.ofNullable(value);根据传入的value值构造一个Optional对象,如果传入的值是null,那么返回一个空的Optional对象
//调用工厂方法创建Optional实例
Optional<String> name = Optional.of("Sanaulla");
if(name.isPresent()){//如果Optional内的值不为null 那么isPresent()方法返回true
System.out.println(name.get());//调用get()方法来返回内部的值
}
System.out.println("*********************** 1 ********************************");
Optional<String> empty = Optional.empty();//生成一个空的Optional对象
System.out.println(empty.isPresent());//返回false
// System.out.println(empty.get()); 如果对一个空的Optional对象调用get()方法 那么将抛出异常
System.out.println("*********************** 2 ********************************");
//上面的ifPresent方法是空参方案,ifPresent方法也可以接收一个lambda表达式作为参数
//然后lambda表达式对Optional的值调用consumer进行处理。
name.ifPresent(value -> System.out.println("输出: " + value) );
System.out.println("*********************** 3 ********************************");
//如果有值则将其返回,否则返回输入的值
System.out.println(empty.orElse("There is no value present!"));//输出:There is no value present!
System.out.println(name.orElse("There is some value!"));//输出:Sanaulla
System.out.println("*********************** 4 ********************************");
//orElseGet与orElse方法类似,区别在于orElse传入的是默认值,orElseGet可以接受一个lambda表达式生成默认值。
System.out.println(empty.orElseGet(() -> "Default Value"));//输出:Default Value
System.out.println(name.orElseGet(() -> "Default Value"));//输出:Sanaulla
System.out.println("*********************** 5 ********************************");
try {
//orElseThrow与orElse方法类似。与返回默认值不同
//如果Optional内的值为null,那么orElseThrow会抛出lambda表达式或方法生成的异常
empty.orElseThrow(()-> new RuntimeException("我的异常"));
} catch (Throwable ex) {
System.out.println(ex.getMessage());//输出: No value present in the Optional instance
}
System.out.println("*********************** 6 ********************************");
//map方法用来对Optional实例的值执行一系列操作(多个操作)
Optional<String> hahaName = name.map((value) -> {
value = value + " 哈哈";
value = value + " 呵呵";
return value;
});
System.out.println( hahaName.orElse("No value found"));
//flatMap方法与map方法类似,区别在于前者返回的是Optional内的value值,或者需要返回一个Optional对象
System.out.println("*********************** 7 ********************************");
hahaName = name.flatMap((value) -> {
value = value + " 哈哈";
value = value + " 呵呵";
return Optional.of(value);
});
System.out.println( hahaName.orElse("No value found"));
System.out.println("*********************** 8 ********************************");
//filter方法检查给定的Option值是否满足某些条件。如果满足则返回同一个Option实例,否则返回空Optional。
Optional<String> longName = name.filter((value) -> value.length() > 6);
System.out.println(longName.orElse("The name is less than 6 characters"));//输出Sanaulla
//另一个例子是Optional值不满足filter指定的条件。
Optional<String> anotherName = Optional.of("Sana");
Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
System.out.println(shortName.orElse("The name is less than 6 characters"));//输出:name长度不足6字符
}
Optional类补充
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- JAVA && Spring && SpringBoot2.x — 学习目录 1. 为什么会出现Optional ...
- 一、前言 Swift相较于OC是一门类型更加安全的语言,其中引入的Optional类型便是为了增强取值可靠性的一种...
- optional 类 Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值...
- 继承中父类和子类拥有相同的成员变量名 当对该变量操作的方法是继承于父类的话,操作的变量是属于父类的,若该方法是子类...
- Optional类型表示: 有值 / 没有值 在Objective-C中并没有Optional类型, 只有nil,...