首页 > 其他分享 >Optional类的使用示例

Optional类的使用示例

时间:2024-01-24 09:49:09浏览次数:22  
标签:str 示例 System 为空 使用 println Optional out

Optional类是Java 8中引入的一个新特性,它可以用来解决空指针异常的问题。在之前的版本中,如果一个方法返回的结果有可能为空,我们通常需要在使用该结果之前进行判空操作,以避免出现NullPointerException。而使用Optional类可以更加简洁和安全地处理这种情况。

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

package com.java8;

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        String value = "Hello, world!";

        // 创建一个包含非空值的Optional对象
        Optional<String> optional1 = Optional.of(value);

        // 获取Optional对象中的值
        String result1 = optional1.get();
        System.out.println(result1);  // 输出:Hello, world!

        // 创建一个可能为空的Optional对象
        Optional<String> optional2 = Optional.ofNullable(null);

        // 判断Optional对象是否包含值
        boolean isPresent = optional2.isPresent();
        System.out.println(isPresent);  // 输出:false

        // 如果Optional对象包含值,则执行指定的操作
        optional1.ifPresent(val -> System.out.println(val));  // 输出:Hello, world!

        // 如果Optional对象为空,则返回默认值
        String result2 = optional2.orElse("Default Value");
        System.out.println(result2);  // 输出:Default Value

        // 如果Optional对象为空,则执行指定的操作并返回结果
        String result3 = optional2.orElseGet(() -> "Default Value");
        System.out.println(result3);  // 输出:Default Value

        // 如果Optional对象为空,则抛出指定的异常
        try {
            optional2.orElseThrow(() -> new IllegalArgumentException("Value is not present"));
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());  // 输出:Value is not present
        }
        System.out.println("-------------------------------------------------------------------------");
        String str = "Hello, World!";

        Optional<String> optionalStr = Optional.ofNullable(str);

        if (optionalStr.isPresent()) {
            System.out.println("str的值为:" + optionalStr.get());
        } else {
            System.out.println("str为空");
        }

        // 使用orElse方法提供默认值
        String defaultValue = optionalStr.orElse("默认值");
        System.out.println("str的值为:" + defaultValue);

        // 使用orElseGet方法提供默认值的计算逻辑
        String computedValue = optionalStr.orElseGet(() -> {
            // 计算默认值的逻辑
            return "计算后的默认值";
        });
        System.out.println("str的值为:" + computedValue);

        // 使用map方法对Optional对象进行转换
        Optional<Integer> optionalLength = optionalStr.map(String::length);
        if (optionalLength.isPresent()) {
            System.out.println("str的长度为:" + optionalLength.get());
        } else {
            System.out.println("str为空");
        }

        // 使用flatMap方法对Optional对象进行转换
        Optional<String> optionalUpperCase = optionalStr.flatMap(s -> Optional.ofNullable(s.toUpperCase()));
        if (optionalUpperCase.isPresent()) {
            System.out.println("str转换为大写后的值为:" + optionalUpperCase.get());
        } else {
            System.out.println("str为空");
        }
    }

}

在上面的示例中,我们首先使用Optional.ofNullable方法将一个可能为空的字符串包装成Optional对象。然后,我们可以通过isPresent方法判断Optional对象是否包含值,并通过get方法获取值。如果Optional对象为空,我们可以使用orElse方法提供一个默认值,或者使用orElseGet方法提供一个计算默认值的逻辑。

此外,我们还可以使用map方法对Optional对象进行转换,或者使用flatMap方法对Optional对象进行扁平化转换。这些方法可以帮助我们更加灵活地处理Optional对象的值。

总之,Optional类的使用可以简化我们对可能为空的值的处理,避免了繁琐的判空操作,使代码更加简洁和安全。

标签:str,示例,System,为空,使用,println,Optional,out
From: https://www.cnblogs.com/RedOrange/p/17700348.html

相关文章

  • Optional类
    到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到GoogleGuava的启发,Optional类已经成为Java8类库的一部分。......
  • CDP技术系列(一):使用bitmap存储数十亿用户ID的标签或群体
    一、背景介绍CDP系统中目前存在大量由用户ID集合组成的标签和群体,截止当前已有几千+标签,群体2W+。大量的标签都是亿级别数据量以上,例如性别、职业、学历等均,甚至有群体中的ID数量达到了数十亿+。并且随着用户ID池的不断增加,标签和群体本身包含的ID数量也随之增加,如何存储如此多......
  • react-bmapgl地图的使用
    importReact,{Component}from'react';import{Map,Marker,NavigationControl,InfoWindow,MapApiLoaderHOC,ZoomControl}from'react-bmapgl';classAppextendsComponent{render(){return(<divclass......
  • 如何使用 JMeter 进行性能和负载测试?
    五星上将麦克阿瑟曾经说过“在性能测试面前,真是麻雀啄了牛屁股——雀食牛逼“一让我们来讲一个故事今天和女朋友吵架了,(假设你有女朋友)。今晚又是一个人睡沙发,这天晚上,你躺在沙发上,夜不能寐决定学习一下这个事情——如何使用JMeter进行性能和负载测试前言JMeter负载测试与性能测试J......
  • Logging模块的使用
    一、日志等级Logging中的日志等级如下:importloggingimportlogging#设置打印日志的级别,level级别以上的日志会打印出#level=logging.DEBUG、INFO、WARNING、ERROR、CRITICALdeflog_testing():#此处进行Logging.basicConfig()设置,后面设置无效logging.ba......
  • 搞起来,使用 SpringBoot 框架徒手撸一个安全、可靠的本地缓存工具
    在实现本地缓存的时候,我们经常使用线程安全的ConcurrentHashMap来暂存数据,然后加上SpringBoot自带的@Scheduled定时刷新缓存。虽然这样可以实现本地缓存,但既不优雅也不安全。那看一下我的思路,首先看一张图!1.每个处理器都有缓存名字、描述信息、缓存初始化顺序等信息,所以应该定义一......
  • Microsoft 365 开发:开发者如何使用Delegated Access通过PowerShell调用Graph API
    51CTOBlog地址:https://blog.51cto.com/u_13969817MicrosoftGraphAPI是一种RESTfulwebAPI,它整合了对各种Microsoft365服务的访问,允许开发人员创建跨多个平台与数据交互的应用程序,包括AzureActiveDirectory、SharePoint、OneDrive、Outlook等。MicrosoftGraphPowerShell适......
  • Microsoft 365 开发:开发者如何使用App ID连接Graph API的方法汇总
    51CTOBlog地址:https://blog.51cto.com/u_13969817在上文中我们介绍了如何在AzureAD中注册Application并授权相关GraphAPI,本文将给大家介绍开发者如何使用AppID和Certificate(Secret)通过PowerShell连接GraphAPI?采用AppID和Certificate通过PowerShell连接GraphAPI的命令如下所......
  • MeterSphere操作之使用测试跟踪
    MeterSphere测试跟踪模块支持测试用例管理、测试用例评审、测试计划跟踪等。用户可以使用树状多级模块来分级分组管理项目下的测试用例,对已添加的测试用例进行评审,创建测试计划,将待测功能测试用例、接口测试用例、UI测试用例及性能测试用例添加到测试计划,执行测试计划,查看测试......
  • MeterSphere测试平台之使用接口测试
    用接口测试MeterSphere接口测试模块提供了接口定义、接口自动化等接口测试相关功能。用户可以使用树状多级模块来分级分组管理项目下的接口列表,创建执行接口用例测试接口,组合编排多个接口用例进行场景自动化测试。1接口定义管理¶进入【接口测试】->【接口定义】页面。......