首页 > 其他分享 >Optional

Optional

时间:2023-08-23 11:06:42浏览次数:43  
标签:对象 Optional Value println optional orElse

Optional是Java 8中引入的一个类,用于处理可能为null的值。它提供了一种优雅的方式来处理可能存在或不存在的值,并避免了空指针异常。

Optional并不是用于替代所有的null检查,而是用来处理特定场景下可能为空的值的情况。

Optional可以视为一个容器,它可以包含一个非空的值(存在),也可以为空(不存在)。通过使用Optional,我们可以明确地表达一个值可能不存在的情况,并且方便地对其进行处理。

以下是Optional类的一些常用方法:

  • orElseThrow(exceptionSupplier):获取Optional对象中的值,如果Optional对象为空则抛出通过指定的异常供应函数exceptionSupplier生成的异常。
  • map(function):对Optional对象中的值进行映射操作,返回一个新的Optional对象。
  • filter(predicate):对Optional对象中的值进行过滤操作,如果满足谓词条件则返回当前Optional对象,否则返回一个空的Optional对象。
  • of(value):创建一个包含指定非空值的Optional对象。
  • ofNullable(value):创建一个包含指定值的Optional对象,如果值为null,则创建一个空的Optional对象。
  • isPresent():检查Optional对象是否包含非空值,如果值存在则返回true,否则返回false。
  • get():获取Optional对象中的值,如果Optional对象为空则抛出NoSuchElementException异常。
  • orElse(other):获取Optional对象中的值,如果Optional对象为空则返回指定的默认值other。
  • orElseGet(supplier):获取Optional对象中的值,如果Optional对象为空,则通过指定的供应函数supplier来生成一个默认值。

下面是一个使用Optional的示例:

import java.util.Optional;

public class OptionalDemo {
    public static void main(String[] args) {
        // 创建一个包含非空值的Optional对象
        Optional<String> optional = Optional.of("Hello, World!");

        // 检查Optional对象是否包含值
        if (optional.isPresent()) {
            // 获取Optional对象中的值
            String value = optional.get();
            System.out.println("Value: " + value);
        }
        
        // 使用filter方法对Optional对象中的值进行过滤操作
        Optional<String> filteredOptional = optional.filter(str -> str.length() > 10);
        System.out.println("Filtered Value: " + filteredOptional.orElse("No Value"));
        
        // 使用orElse方法获取Optional对象中的值,如果不存在则返回默认值
        String result = emptyOptional.orElse("Default Value");
        System.out.println("Result: " + result);

        // 使用map方法对Optional对象中的值进行映射操作
        Optional<String> mappedOptional = optional.map(str -> str.toUpperCase());
        System.out.println("Mapped Value: " + mappedOptional.orElse("No Value"));
    }
}

使用Optional可以使代码更加清晰、可读,并且减少了空指针异常的风险。

附上JAVA11版的Optional中文官方API:https://www.apiref.com/java11-zh/java.base/java/util/Optional.html 

Optional_Optional

标签:对象,Optional,Value,println,optional,orElse
From: https://blog.51cto.com/u_16226278/7200116

相关文章

  • 20230619 java.util.Optional
    介绍java.util.Optional类声明@jdk.internal.ValueBasedpublicfinalclassOptional<T>包装一个可能为null的值只有在正确使用的情况下才会更安全对应基本类型类:OptionalInt,OptionalLong,OptionalDoubleAPIstatic创建OptionalemptyofofNullablepublic......
  • Optional详解
    1.介绍Optional是Java8引入的一个新的类,它是java.util包下面的一个类。主要目的是为了解决空指针异常问题,它既可以含有对象也可以为空。2.Optional的使用2.1:创建一个Optional如果需要创建一个空的Optional的话,则可以使用Optional的empty()方法。empty方法的代码为:publicsta......
  • std::optional的使用
    optional是一个模板类:template<classT>classoptional;它内部有两种状态,要么有值(T类型),要么没有值(std::nullopt)。有点像T*指针,要么指向一个T类型,要么是空指针(nullptr)。std::optional有以下几种构造方式:#include<iostream>#include<optional>usingnamespacestd;intmai......
  • std::optional 内存布局
    对于std::optional<int>对应的内存布局为structoptional_mem{ int_M_payload; bool_M_engaged;};可以通过godbolt通过pahole工具查看在汇编窗口选择pahole右侧会显示数据结构classexception_ptr{ void*_M_exception_object;/*0......
  • [Typescript] 150 Hard - OptionalUndefined
    Implementtheutiltype OptionalUndefined<T,Props> thatturnsallthepropertiesof T thatcanbe undefined,intooptionalproperties.Inaddition,asecond-optional-generic Props canbepassedtorestrictthepropertiesthatcanbealtered.Opti......
  • Java8新特性之Optional类的妙用
    该新特性也是翻java八股翻到的,感觉有点小用,所以记录一下通常我们在调用方法获取参数时,常常会出现要避免空指针,从而进行一系列判断非空的代码,这部分十分冗长且啰嗦还重复,故可以使用一下今天的主角:Java.util.Optional类创建方式共有三种方式供您选择直接创建空的Optional对......
  • 从头学Java17-Stream API(二)结合Record、Optional
    StreamAPIStreamAPI是按照map/filter/reduce方法处理内存中数据的最佳工具。本系列教程由Record讲起,然后结合Optional,讨论collector的设计。使用Record对不可变数据进行建模Java语言为您提供了几种创建不可变类的方法。可能最直接的是创建一个包含final字段的final类。......
  • java的可选链Optional
    Optional是Jdk1.8提供的一个新类,用以解决null判断问题,作用类似于JavaScript中的可选链例如如下场景:privatevoidgetIsoCode(Useruser){if(user!=null){Addressaddress=user.getAddress();if(address!=null){Countrycount......
  • Optional
    1.Optional简介Optional是一个容器对象,可以存储对象、字符串等值,当然也可以存储null值。Optional提供很多有用的方法,能帮助我们将Java中的对象等一些值存入其中,这样我们就不用显式进行空值检测,使我们能够用少量的代码完成复杂的流程。比如它提供了:of() 方法,可以将......
  • Optional
    代码写在course2中1. 概述   37我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。例如:Authorauthor=getAuthor();if(author!=null){System.out.println(author.getName());}尤其是对象中的属性还......