资讯专栏INFORMATION COLUMN

Java 8 新特性之Optional类

Little_XM / 1143人阅读

摘要:概述简介类是一个容器类,代表一个值存在或不存在,原来用表示一个值不存在,现在可以更好的表达这个概念,并且可以避免空指针异常。否则返回字符串长度为与类似,要求返回值必须是字符串长度为本文首发于凌风博客新特性之类作者凌风

1. 概述 1.1 简介

Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念,并且可以避免空指针异常。

Optional 容器类的常用方法

of(T t) 创建一个 Optional 实例

get() 获取容器中的对象

empty() 创建一个空的 Optional 实例

ofNullable(T t) 若 t 不为 null,创建 Optional 实例,否则创建空实例

isPresent() 判断是否包含值

orElse(T t) 如果调用对象包含值,返回该值,否则返回 t

orElseGet(Supplier s) 如果调用对象包含值,返回该值,否则返回 s 获取的值

map(Function f) 如果有值对其处理,并返回处理后的 Optional。否则返回 Optional.empty()

flatMap(Function mapper) 与 map 类似,要求返回值必须是 Optional

2. Optional 容器类的常用方法 2.1 of(T t) 创建一个 Optional 实例
@Test
public void t1() {
    Optional op = Optional.of(new String("ling"));
    String emp = op.get();
    System.out.println(emp);
}
2.2 empty() 创建一个空的 Optional 实例
@Test
public void t2() {
    Optional op = Optional.empty();
    System.out.println(op.get());
}

当创建一个空的 Optional 容器时,再使用 get() 方法会报获取不到值的异常 java.util.NoSuchElementException: No value present

2.3 ofNullable(T t) 若 t 不为 null,创建 Optional 实例,否则创建空实例
@Test
public void t3() {
    Optional op = Optional.ofNullable(null);
    System.out.println(op.get());
}

ofNullable 在使用 null 创建容器的时候,同样会抛出 java.util.NoSuchElementException: No value present 异常

2.4 isPresent() 判断是否包含值
@Test
public void t4() {
    Optional op = Optional.ofNullable(new String("ling"));
    // 有值就获取,没值就什么都不做
    if (op.isPresent()) {
        System.out.println(op.get());
    }
}
2.5 orElse(T t) 如果调用对象包含值,返回该值,否则返回 t
@Test
public void t5() {
    Optional op = Optional.ofNullable(null);
    String str = op.orElse("feng");
    System.out.println(str);
}
2.6 orElseGet(Supplier s) 如果调用对象包含值,返回该值,否则返回 s 获取的值
@Test
public void t6() {
    Optional op = Optional.ofNullable(null);
    String str = op.orElseGet(() -> new String("feng"));
    System.out.println(str);
}
2.7 map(Function f) 如果有值对其处理,并返回处理后的 Optional。否则返回 Optional.empty()
@Test
public void t8() {
    Optional op = Optional.ofNullable("lingfeng");
    Optional len = op.map((s) -> s.length());
    System.out.println("字符串长度为 : " + len.get());
}
2.8 flatMap(Function mapper) 与 map 类似,要求返回值必须是 Optional
@Test
public void t9() {
    Optional op = Optional.ofNullable("lingfeng");
    Optional len = op.flatMap((s) -> Optional.of(s.length()));
    System.out.println("字符串长度为 : " + len.get());
}
本文首发于凌风博客:Java 8 新特性之Optional类
作者:凌风

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72781.html

相关文章

  • Java8特性Optional

    摘要:上一篇小乐带大家了解了新特性之,接下来将会继续述说新特性之类是一个容器类,代表一个值存在或不存在,原来用表示一个值不存在,现在可以更好的表达这个概念。并且可以避免空指针异常。如果有值则将其返回,否则抛出。隐士地其中进行了判断。 上一篇小乐带大家了解了Java8新特性之Stream,接下来将会继续述说Java新特性之Optional showImg(https://segmentfaul...

    stackfing 评论0 收藏0
  • Java核心技术教程整理,长期更

    以下是Java技术栈微信公众号发布的关于 Java 的技术干货,从以下几个方面汇总。 Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 Java 工具篇 Java 书籍篇 Java基础篇 8张图带你轻松温习 Java 知识 Java父类强制转换子类原则 一张图搞清楚 Java 异常机制 通用唯一标识码UUID的介绍及使用 字符串...

    Anchorer 评论0 收藏0
  • Java特性总览

    摘要:新特性总览标签本文主要介绍的新特性,包括表达式方法引用流默认方法组合式异步编程新的时间,等等各个方面。还有对应的和类型的函数连接字符串广义的归约汇总起始值,映射方法,二元结合二元结合。使用并行流时要注意避免共享可变状态。 Java8新特性总览 标签: java [TOC] 本文主要介绍 Java 8 的新特性,包括 Lambda 表达式、方法引用、流(Stream API)、默认方...

    mayaohua 评论0 收藏0
  • Java 8 特性Stream API

    摘要:简而言之,提供了一种高效且易于使用的处理数据的方式。和以前的操作不同,操作还有两个基础的特征中间操作都会返回流对象本身。注意自己不会存储元素不会改变源对象,相反,它们会返回一个持有结果的新操作时延迟执行的。为集合创建并行流。 1. 概述 1.1 简介 Java 8 中有两大最为重要的改革,第一个是 Lambda 表达式,另外一个则是 Stream API(java.util.strea...

    cooxer 评论0 收藏0
  • 聊聊 Java8 以后各个版本的特性

    摘要:于是抽时间看了看以后各个版本的特性,做了一个总结。年和公开版本发布,取名为。此后对应版本就是,。发布,是一个重大版本更新。在此之后,就是每六个月发布一次新版本。以上和参考资料聊了一些关于的历史,下面我们看看各个版本有那些新特性。 【这是 ZY 第 11 篇原创技术文章】 某天在网上闲逛,突然看到有篇介绍 Java 11 新特性的文章,顿时心里一惊,毕竟我对于 Java 的版本认识...

    K_B_Z 评论0 收藏0

发表评论

0条评论

Little_XM

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<