乐字节-Java8新特性之Optional

上一篇小乐带大家了解了Java新特性之Stream,接下来将会继续述说Java新特性之Optional

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

1、of

为非null的值创建一个Optional,如果值为null,则会抛出NullPointerException

Optional<Integer> optional = Optional.of(13);System.out.println(optional)

2、ofNullable

为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。

Optional<String> optional2 = Optional.ofNullable(null);System.out.println(optional2);optional2 = Optional.ofNullable("aaa");System.out.println(optional2);

3、isPresent

如果值存在返回true,否则返回false。

Optional<String> optional2 = Optional.ofNullable(null);System.out.println(optional2);System.out.println(optional2.isPresent());?optional2 = Optional.ofNullable("aaa");System.out.println(optional2);System.out.println(optional2.isPresent());

4、get

如果Optional有值则将其返回,否则抛出NoSuchElementException。

optional2 = Optional.ofNullable("aaa");System.out.println(optional2);System.out.println(optional2.isPresent());System.out.println(optional2.get());

5、ifPresent  

如果Optional实例有值则为其调用consumer,否则不做处理 。隐士地其中进行了null判断。

public static void main(String[] args) {    String str1 = "hello";    String str2 = null;    Optional<String> optional1 = Optional.ofNullable(str1);    Optional<String> optional2 = Optional.ofNullable(str2);?    optional1.ifPresent(str->System.out.println(str.length()));    optional2.ifPresent(str-> System.out.println(str.length()));}

6、orElse

如果有值则将其返回,否则返回指定的其它值。

public static void main(String[] args) {    String str1 = "hello";    String str2 = null;    Optional<String> optional1 = Optional.ofNullable(str1);    Optional<String> optional2 = Optional.ofNullable(str2);    System.out.println(optional1.orElse("默认字符串"));    System.out.println(optional2.orElse("默认字符串"));}

7、orElseGet

orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的一个值作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值

public static void main(String[] args) {    Integer i = 20;    Optional<Integer> op = Optional.ofNullable(i);    System.out.println(op.orElseGet(()->0));    System.out.println(Optional.ofNullable(null).orElseGet(()->0));}

8、orElseThrow

如果有值则将其返回,否则抛出supplier接口创建的异常。

public static void main(String[] args) {    // 自己指定异常    System.out.println((Optional.ofNullable("a").orElseThrow(()->new IndexOutOfBoundsException())));    System.out.println((Optional.ofNullable(null).orElseThrow(()->new IndexOutOfBoundsException())));}

9、map

map处理有值的情况,如果有值,则对其执行调用map参数中的函数得到返回值,否则返回空Optional。

public static void main(String[] args) {   List<String> list = new ArrayList<String>(){       {            add("aaa");            add("bbb");            add(null);       }   };?   list.stream().forEach(temp ->{        Optional<String> opt = Optional.ofNullable(temp);        System.out.println(opt.map(n -> {           return n.toUpperCase();        }).orElse("Nothing"));   });?   // 简写为如下形式    list.stream().forEach(temp->{        System.out.println(Optional.ofNullable(temp).map(n->n.toUpperCase()).orElse("Nothing"));    });}

10、flatMap

如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。 可以将内容

public static void main(String[] args) {    Optional<String> opt1 = Optional.ofNullable("aaa");    Optional<String> opt2 = Optional.ofNullable(null);    System.out.println(opt1.flatMap(n->{        return Optional.ofNullable(n.toUpperCase());    }).orElse("还会没有吗"));?    System.out.println( opt2.flatMap(n->{        return Optional.ofNullable(n.toUpperCase());    }).orElse("还会没有吗"));}

11、filter

如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。

public static void main(String[] args) {    Optional<String> opt1 = Optional.ofNullable("aabbbbaa");    Optional<String> opt2 = Optional.ofNullable(null);?    System.out.println(opt1.filter(value->value.length()>6));    System.out.println(opt2.filter(value->value.length()>6));}

好了,Java8新特性之Optional就介绍到这里了,接下去小乐将会继续带大家了解Java8新特性,请继续关注,转载请说明出处和作者。

原文地址:https://www.cnblogs.com/lotbyte/p/10698341.html

时间: 2024-11-10 01:50:23

乐字节-Java8新特性之Optional的相关文章

乐字节-Java8新特性-接口默认方法之Stream流(下)

接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 筛选和切片 filter(T -> boolean):保留 boolean 为 true 的元素 limit(long n):返回前 n 个元素 skip(long n):去除前 n 个元素 distinct():去除重复元素,这个方法是通过类的 equals 方法来判断两个元素是否相等的 映射 map

乐字节Java8核心特性之Optional类

大家好啊,上次小乐给大家介绍了Java8最最重要的一个特性——Stream流,点击可以回顾哦. Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念.并且可以避免空指针异常. 1.Optinal对象构建&值获取方法 方法 操作描述 <T> Optional<T> of(T value) 为非null的值创建一个Optional,如果值为nu

乐字节-Java8核心特性实战之函数式接口

什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. java8引入@FunctionalInterface 注解声明该接口是一个函数式接口. 语法 抽象方法有且仅有一个 接口使用@FunctionalInterface 注解进行标注 接口中可以存在默认方法和静态方法实现 如下形式: /** * 定义函数式

Java8新特性之Optional

空指针异常一直是困扰Java程序员的问题,也是我们必须要考虑的.当业务代码中充满了if else判断null 的时候程序变得不再优雅,在Java8中提供了Optional类为我们解决NullPointerException. 我们先来看看这段代码有什么问题? 1 2 3 4 5 6 7 8 9 class User {     String name;     public String getName() {         return name;     } } public static

Java8 新特性 Optional 类

Optional 类的简介 ??Optional类的是来自谷歌Guava的启发,然后就加入到Java8新特性中去了.Optional类主要就是为子决解价值亿万的错误,空指针异常. ??Optional类其实就是一个可选值的包装类,说明这个类即可以有空值,也可以有对象. Optional 简单使用 ??这个类也会报空指针异常:of(),empty() @Test public void OptionalTest() { //报:NullPointerException //of()方法,是在传入n

java8 新特性精心整理

前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子说明在什么场景下适合使用. 引用:本文参考了这两篇文章,加以自己的理解,整理成一份最容易理解的 Java8 新特性文章,有少部分章节可能内容一致,但绝对不是抄袭,只是为了文章的完整性,大部分常用的地方加了我自己的理解和示例. https://blog.

java8 新特性精心整理(全)

前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子说明在什么场景下适合使用. 引用:本文参考了这两篇文章,加以自己的理解,整理成一份最容易理解的 Java8 新特性文章,有少部分章节可能内容一致,但绝对不是抄袭,只是为了文章的完整性,大部分常用的地方加了我自己的理解和示例. https://blog.

Java8新特性浅析

欢迎阅读我编写的Java 8介绍.本教程将带领你一步一步地认识这门语言的新特性.通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复注解.看完这篇教程后,你还将对最新推出的API有一定的了解,例如:流控制,函数式接口,map扩展和新的时间日期API等等. 允许在接口中有默认方法实现 Java 8 允许我们使用default关键字,为接口声明添加非抽象的方法实现.这个特性又被称为扩展方法.下面是我们的第一个例子: 1 2 3 4 5 6 7 interfac

Java 8 新特性:Java 类库的新特性之 Optional类 ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  Java 类库的新特性之 Optional类 1.Optional简述 到目前为止,著名的NullPointerException是导致Java应用程序失败的最常见原因.过去,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的