Optional用法

说明:Optional和Stream一样,是Java8引入的特性,本文介绍Optional的几个实际用法。Steam流使用,参考下面这篇文章:

  • Stream流使用

使用

1.保证值存在

        // 1.保证值存在,pageNumber,pageSize
        Integer pageNumber = null;
        Integer pageSize = null;
        pageNumber = Optional.ofNullable(pageNumber).orElse(1);
        pageSize = Optional.ofNullable(pageSize).orElse(10);
        System.out.println("pageNumber = " + pageNumber + ", pageSize = " + pageSize);

在这里插入图片描述

2.保证值合法

        // 2.保证值合法
        Integer id = -1;
        id = Optional.ofNullable(id).filter(e -> e > 0).orElse(1);
        System.out.println("id = " + id);

        // 或,不合法时抛出异常
        id = -1;
        Optional.ofNullable(id).filter(e -> e > 0).orElseThrow(() -> new IllegalArgumentException("id必须大于0"));

在这里插入图片描述

3.避免多次空判断

有时我们想获取一个对象中的对象的对象的值,如下:

        Country country = new Country("中国", "100001");

        Address address = new Address("北京", "北京市", "长安街", "北京市长安街", country);

        Student student = new Student("001", "张三", "男", 18, address);

学生对象中有地址对象,地址对象中有国家对象,当我们要获取该学生的国家名称时,常规情况,我们需要这样:

        // 3.获取该学生的国家名称
        if (student != null) {
            Address address1 = student.getAddress();
            if (address1 != null) {
                Country country1 = address1.getCountry();
                if (country1 != null) {
                    String name = country1.getName();
                    if (name != null) {
                        System.out.println("name = " + name);
                    } else {
                        System.out.println("未知");
                    }
                }
            }
        }

在这里插入图片描述

使用Optional就很方便

        // 使用Optional
        String name = Optional.ofNullable(student)
                .map(Student::getAddress)
                .map(Address::getCountry)
                .map(Country::getName)
                .orElse("未知");

        System.out.println("name = " + name);

在这里插入图片描述

总结

以上三个例子,来自阿里云藏经阁电子书《Java工程师必读手册》P294~295,地址如下:

  • 电子书《Java工程师必读手册》地址:https://developer.aliyun.com/ebook/7780

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/626579.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PR标题模板,视频内容要点提示文字列表模板剪辑素材

Premiere Pro的要点列表标题模板。 主要特点: 可以无限制地添加任意数量的列表项。 使用直观的控件轻松自定义列表的各个方面。只需点击几下,即可调整颜色、大小、位置等。 轻松调整颜色,享受完全的创作自由。 可以轻松调整列表项之间的间距…

mybatis-plus之数据源切换事务失效问题

为什么存在数据源切换和食物时效问题? 由于业务数据来源不同 需要配置多个数据源来进行数据的查询 编辑等操作 这一切换业务对数据的一致性要求很高那就要保证ACID啦 也就是数据的有效性 要么是成功的 要么是失败的。 数据源切换采用mybatisplus支持 多数据源配置&a…

Linux下VMamba 环境复现+环境测试

# 1. 创建自己的虚拟环境 conda create -n VMamba python3.10.13 conda activate VMamba # 2. cuda-11.8 conda install cudatoolkit11.8 -c nvidia # 3. torch torchvision torchaudio 与 官网命令一致 pip install torch2.1.1 torchvision0.16.1 torchaudio2.1.1 --index-url…

自集成式 HTTP 代理方案

前言 大部分程序员,想必都会有一个常用的抓包代理工具; 但在座的各位,可曾见过这样一款集成在 Web 应用中的代理工具? ​,时长00:45 它是明显区别于传统代理工具的,有以下特性: 零安装、零配…

解决AdaptiveAvgPool2d部署算子不支持问题

一、Pytorch中AdaptiveAvgPool2d函数详解 torch.nn.AdaptiveAvgPool2d()接受两个参数,分别为输出特征图的长和宽,其通道数前后不发生变化。如以下: self.global_avgpool nn.AdaptiveAvgPool2d(1) # 输出N*C*1*1 self.global_avgpool …

AcWing166. 数独-DFS剪枝与优化

题目 思路 思考问题:搜索顺序->考虑剪枝搜索顺序:先随意选择一个空格子,枚举该格子可填写的数字,当所有格子都填完的时候,说明可以退出了剪枝: 优化搜索顺序:随意选择一个空格子&#xff1a…

【讲解下iCloud如何高效利用】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

C++实战演练---负载均衡在线oj项目 || 编译服务模块设计

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 前言 上一篇预热文章简单说过我们的编写思路,首先要实现的是编译功能,那么在编译功能版块中&…

Java面试八股之float和double的区别

Java中float和double的区别 存储空间与精度: double:占据64位(8字节)存储空间,属于双精度浮点数。它可以提供较高的精度,通常能够精确表示大约15到17位十进制数字,适合用于需要较高精度计算或…

SSM【Spring SpringMVC Mybatis】—— Spring(二)

如果对于Spring的一些基础理论感兴趣可见👇 SSM【Spring SpringMVC Mybatis】—— Spring(一) 目录 1、Spring中bean的作用域 1.1 语法 1.2 四个作用域 2、Spring中bean的生命周期 2.1 bean的生命周期 2.2 bean的后置处理器 2.3 添加后…

upload-labs靶场通关详解(1-15)

1.pass-01 查看源代码 是js,属于前端校验 可以通过禁用js来上传文件 2.pass-02 根据提示是MIME绕过 MIME:是设定某种扩展名的文件 用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来…

OpenAI发布新品GPT-4o,电影《HER》演绎的世界真的来了!

5月14日,OpenAI宣布推出最新旗舰生成式AI模型GPT-4o,它可以实时处理音频、视觉、并对文本进行推理。可以说这是一种全新的交互模式,它完美复刻电影《Her》的世界,标志着人工智能全感知时代的到来。 GpuMall智算云 | 省钱、好用、…

swiper 点击事件失效问题

在刚开始使用是 swiper 时,点击事件有时失效,这些个问题的原因是:swiper设置looptrue时,会生成虚拟slide进行填充,对这些虚拟slide元素进行操作是无效的。 简单粗暴的方法就是将 loop 置为 false ....................…

JVM面试题:85道JVM虚拟机面试题及答案

面试题 1 .简述Java堆的结构?什么是堆中的永久代(Perm Gen space)? JVM整体结构及内存模型 试题回答参考思路: 1、堆结构 JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自…

开发测试必须知道的 10种 常见软件架构模式

你是否想知道企业大规模系统是如何设计的? 在软件开发开始之前,我们必须选择一个合适的架构,能提供所需的功能和质量特性。因此,在将架构应用到我们的设计之前,我们应该了解各种不同架构的特点。 01 什么是架构模式 根据维基百…

一文分享:抖音外卖城市合伙人如何申请合作?

在当今数字化时代,外卖和团购业务蓬勃发展,商家们纷纷寻求在多个平台上拓宽销售渠道,以获取更多的订单和利润,这也给创业者提供创来机会。在这其中,抖音外卖作为一股新势力,自然吸引了众多创业者的目光&…

解锁客户需求密码:银行业数据分析在业务决策中的关键作用

一、引言 在数字化和大数据时代的浪潮下,银行业正经历着前所未有的变革。作为数据分析领域的资深专家,我深知数据分析在银行业务发展中的重要性和价值。本文将从银行业数据分析的角度出发,深入探讨相关业务场景下的数据分析应用,…

斥巨资!韩国力撑芯片产业

KlipC报道:韩国为加强本国半导体产业竞争力,将推进一项超过10万亿韩元的支持计划。 大型科技公司微软、亚马逊和谷歌为了保持自己大型语言模型的竞争力,投入了大量的资金,全球对可生成AI应用的需求在不断增长,市场上对…

Vision Mamba 代码调试---Pycharm+AutoDL

《AutoDL使用手册》 1. 服务器租用与配置 先上项目链接: GitHub - hustvl/Vim: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 1.1 服务器租用与配置 根据环境要求,去租一个服务器:AutoDL算…

Ajax 学习

文章目录 1. 前置知识1.1 ajax 介绍1.2 XML 简介 2. AJAX 学习2.1 AJAX基础学习(1)AJAX的特点(2)AJAX 初体验(3)服务端响应json 数据 2.2 IE 缓存问题2.3 请求超时和网络异常2.4 手动取消请求2.5 重复请求2…