Optional使用

Optional

  • Optional是Java8的新特性
  • Optional提供了对值为空的情况的解决,使得不必再使用if (object == null)来判断变量的值是否为空

创建Optional对象

  • Empty() 方法创建一个Optional.empty对象
Optional<String> optional = Optional.empty();
  • of()方法创建一个非空的Optional对象,如果参数为空则出现空指针异常
Optional<String> optional = Optional.of("bla bla");
  • ofNullable创建一个可以为空的Optional对象,如果参数为null,则创建Optional.empty对象
Optional<String> optional = Optional.ofNullable(null);

判断值是否存在

  • 在大多数情况下应该使用ifPresent(Consumer<? super T> consumer)方法来判断值是否存在以及执行相应的语句,而不是isPresent()。原因是后者仅返回一个boolean类型的结果,依然需要使用if语句来进行判断,没有意义
Optional<String> optional = Optional.ofNullable("zhangsan");
optional.ifPresent(System.out::println); // 如果存在就打印出来

设置(获取)默认值

  • orElse()和orElseGet()可以为Optional设置默认值和获取Optional的值
Optional<String> optional = Optional.ofNullable("zhangsan");
String name = optional.orElse("lisi"); // 如果optional值为空的话,则返回默认值"lisi"

Optional<String> optional = Optional.ofNullable("zhangsan");
String name = optional.orElseGet(() -> "lisi"); // 使用orElseGet()获取optional的值,optional为空就返回默认值
  • 两者的取别还是参数上的取别,orElseGet()可以传递lambda表达式,当optional的参数不为空的时候,orElseGet()方法不会执行,而orElse()方法依然会执行,所以orElseGet()方法性能更优一些

filter

  • filter() 方法的参数类型为 Predicate(Java 8 新增的一个函数式接口),也就是说可以将一个 Lambda 表达式传递给该方法作为条件,如果表达式的结果为 false,则返回一个 Optional.empty 对象,否则返回过滤后的 Optional 对象
// 判断字符串长度
Optional<String> optional = Optional.ofNullable("zhangsan");
optional.filter(str -> str.length() > 3 && str.length() < 10).ifPresent(b -> System.out.println("符合规范"));

map()

  • map()方法将Optional的值进行转换操作,操作的结果为一个新的Optional对象而不改变原来的对象
Optional<String> optional = Optional.ofNullable("zhangsan");
optional.map(String::toUpperCase).ifPresent(System.out::println);

flatMap()

  • flatMap()方法与map()方法类似,区别在于flatMap()不会将操作结果自动封装为Optional对象,需要手动封装
Optional<String> optional = Optional.ofNullable("zhangsan");
optional.flatMap(name -> Optional.of(name.toUpperCase())).ifPresent(System.out::println);

参考

https://www.cnblogs.com/qing-gee/p/12453827.html
https://blog.csdn.net/L_Sail/article/details/78868673

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值