Java 8 Optional 类 学习

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/62216945 1. Optional类的简介Optional 类是一个可以为null的容器对象。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/62216945

1. Optional类的简介

Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。

2.类声明

以下是一个 java.util.Optional 类的声明:

public final class Optional<T> extends Object

3.类方法

  • static Optional empty() 返回空的 Optional 实例。

  • boolean equals(Object obj) 判断其他对象是否等于 Optional。

  • Optional filter(Predicate< ? super predicate如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。

  • Optional flatMap(Function< ? super T,Optional> mapper)
    如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional

  • T get()
    如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException

  • int hashCode()
    返回存在值的哈希码,如果值不存在 返回 0。

  • void ifPresent(Consumer< ? super T> consumer)
    如果值存在则使用该值调用 consumer , 否则不做任何事情。

  • boolean isPresent()
    如果值存在则方法会返回true,否则返回 false。

  • Optional map(Function< ? super T, ? extends U> mapper)
    如果存在该值,提供的映射方法,如果返回非null,返回一个Optional描述结果。

  • static Optional of(T value)
    返回一个指定非null值的Optional。

  • static Optional ofNullable(T value)
    如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。

  • T orElse(T other) 如果存在该值,返回值, 否则返回 other。

  • T orElseGet(Supplier< ? extends T> other)
    如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。

  • T orElseThrow(Supplier< ? extends X> exceptionSupplier)如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常

  • String toString() 返回一个Optional的非空字符串,用来调试。

3.Optional 实例

我们可以通过以下实例来更好的了解 Optional 类的使用:

import java.util.Optional;

public class Java8Tester {
   public static void main(String args[]){

      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);

      // Optional.ofNullable - 允许传递为 null 参数
      Optional<Integer> a = Optional.ofNullable(value1);

      // Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a,b));
   }

   public Integer sum(Optional<Integer> a, Optional<Integer> b){

      // Optional.isPresent - 判断值是否存在

      System.out.println("第一个参数值存在: " + a.isPresent());
      System.out.println("第二个参数值存在: " + b.isPresent());

      // Optional.orElse - 如果值存在,返回它,否则返回默认值
      Integer value1 = a.orElse(new Integer(0));

      //Optional.get - 获取值,值需要存在
      Integer value2 = b.get();
      return value1 + value2;
   }
}

结果:

第一个参数值存在: false
第二个参数值存在: true
10
相关文章
|
1天前
|
JavaScript Java 测试技术
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
15 1
|
1天前
|
JavaScript Java 测试技术
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
14 0
|
2天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
3天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
7天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
11 0
|
7天前
|
Java 存储
键值之道:深入学习Java中强大的HashMap(二)
键值之道:深入学习Java中强大的HashMap
10 0
键值之道:深入学习Java中强大的HashMap(二)
|
9天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
1月前
|
存储 安全 Java
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
37 1