首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JAVA8新特性(六)——Optional API

JAVA8新特性(六)——Optional API

作者头像
逝兮诚
发布2019-10-30 18:58:12
发布2019-10-30 18:58:12
1.1K0
举报
文章被收录于专栏:代码人生代码人生

Optional对null提供了一个更优雅的实现。

比如我们要判断str是否为空,为空则赋值为defalut,用之前的写法是这样:

代码语言:javascript
复制
if(str!=null && !“”.equlas(str)) {
 
} else {
 str = “defalut”
}

但是,使用Oprional

代码语言:javascript
复制
Optional. ofNullable(str). orElse(“defalut”);

Optional的常用方法

of和ofNullable

of和ofNullable是用于创建Optional对象的,of不能创建null对象,而ofNullable可以。

代码语言:javascript
复制
Optional<String> str = Optional.of("sss");
//of参数为空,抛nullPointException
//Optional<String> str1 = Optional.of(null);
//ofNullable,参数可以为空,为空则返回值为空
Optional<String> str1 = Optional.ofNullable(null);
isPresent和get

isPresent是用来判断对象是否为空,get获得该对象。

代码语言:javascript
复制
if (str.isPresent()) {
    System.out.println(str.get());
}
if (str1.isPresent()) {
    System.out.println(str1.get());
}
orElse和orElseGet

orElse和orElseGet都是实现当Optional为空时,给对象赋值。orElse参数为赋值对象,orElseGet为Supplier函数接口。

代码语言:javascript
复制
//orElse
System.out.println(str.orElse("There is no value present!"));
System.out.println(str1.orElse("There is no value present!"));

//orElseGet,设置默认值
System.out.println(str.orElseGet(() -> "default value"));
System.out.println(str1.orElseGet(() -> "default value"));
orElseThrow

orElseThrow是当存在null时,抛出异常。

代码语言:javascript
复制
try {
    //orElseThrow
    str1.orElseThrow(Exception::new);
} catch (Throwable ex) {
    //输出: No value present in the Optional instance
    System.out.println(ex.getMessage());
}
map和flatmap

map和flatmap都是映射,即将Optional中的对象通过Function函数接口转成其他对象。map的函数接口的参数是T,而flatmap的参数是Optional对象

代码语言:javascript
复制
//map
Optional<String> upperName = str.map((value) -> value.toUpperCase());
System.out.println(upperName.orElse("default value"));
Optional<String> upperName1 = str1.map((value) -> value.toUpperCase());
System.out.println(upperName1.orElse("default value"));

//flatmap
upperName = str.flatMap((value) -> Optional.of(value.toUpperCase()));
System.out.println(upperName.orElse("No value found"));
filter

filter是过滤器,参数是Predicate接口。过滤不过对象返回null。

代码语言:javascript
复制
//filter,参数是Predicate接口
Optional<String> newStr = str.filter((value) -> value.length() > 5);
System.out.println(newStr.orElse("str length is less than 5"));
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/09/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Optional的常用方法
    • of和ofNullable
    • isPresent和get
    • orElse和orElseGet
    • orElseThrow
    • map和flatmap
    • filter
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档