java Optional

我还没用过java8的一些语法,有点老古董了,记录下Optional怎么用。 

从源码看,Optional内部持有一个对象, 有一些api对这个对象进行判空处理。 

静态方法of ,生成Optional对象, 但这个value不能为空,因为构造器判断value为空直接抛异常。


如果值可以为空,调用下面的ofNullable方法生成Optional。


常用方法:

1、get方法,value确定非空再调用该方法,可以强制开发处理空值。


2、isPresent、isEmpty方法, 判断是否有值


3、ifPresent  值非空时,传该值执行一个操作。

public void ifPresent(Consumer<? super T> action) {if (this.value != null) {action.accept(this.value);}
}

4、ifPresentOrElse方法, 值非空时执行一个操作,否则执行另一个操作

5、filter 方法,判断值是否满足一个条件

6、map 方法, 转化数据。

7、flatMap方法,同map,但会检查转化后的数据是否为空,转化为null会抛异常。

8、当Optional存的值为空,则生成一个Optional(值仍然可能为空)

9、stream方法,生成流

10、orElseGet ,获取值,值为null则生成一个值

11、 还有空值就抛异常的方法。

支持链式调用,可与方法引用配合使用,比较方便,


Optional.ofNullable(user).map(User::getName).filter(name -> !name.isEmpty()).orElse("Unknown");

总结:Optional 主要是对数据进行各种处理,比如空值处理,数据转化、数据过滤、异常处理等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java面试笔记:进阶】24.有哪些方法可以在运行时动态生成一个Java类?

在Java中,运行时动态生成类是实现动态编程、框架扩展(如AOP、ORM)和插件化系统的关键技术。 1.动态生成Java类的方法 1.从源码生成 直接生成源码文件:通过Java程序生成源码并保存为文件。编译源码: 使用ProcessBuilder启动javac进程进行编译。使用Java Compiler API(ja…

基于Jamba模型的天气预测实战

深入探索Mamba模型架构与应用 - 商品搜索 - 京东 DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 由于大气运动极为复杂&#xff0c;影响天气的因素较多&#xff0c;而人们认识大气本身运动的能力极为有限&#xff0c;因此以前天气预报水平较低 。预报员在预…

GAMES202-高质量实时渲染(Real-Time Shadows)

目录 Shadow MappingshadowMapping的问题shadow mapping背后的数学PCF&#xff08;Percentage Closer Filtering&#xff09;PCSS&#xff08;Percentage closer soft shadows&#xff09;VSSM&#xff08;Variance Soft Shadow Mapping&#xff09;优化步骤3优化步骤1SAT&…

iphonex uniapp textarea标签兼容性处理过程梳理

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“iphonex uniapp textarea标签兼容性处理过程梳理”。 在uniapp项目中&#xff0c;经常会使用到uniapp原生的textarea标签&#xff0c;但在手机兼容性这块&#xff0c;textarea并不是很好用&#xff0c;会出现一些…

C++ 区分关键字和标识符

1. 关键字&#xff08;Keywords&#xff09; 定义&#xff1a;关键字是编程语言预定义的具有特定意义的单词。它们是语言的一部分&#xff0c;C编译器具有特殊的理解规则&#xff0c;不能作为用户自定义的标识符。作用&#xff1a;关键字用于定义语言结构&#xff0c;如声明变…

杭电oj(1087、1203、1003)题解

DP 即动态规划&#xff08;Dynamic Programming&#xff09;&#xff0c;是一种通过把原问题分解为相对简单的子问题&#xff0c;并保存子问题的解来避免重复计算&#xff0c;从而解决复杂问题的算法策略。以下从几个方面简述动态规划&#xff1a; 基本思想 动态规划的核心在…

一键多环境构建——用 Hvigor 玩转 HarmonyOS Next

引言 在 HarmonyOS Next 的应用开发中&#xff0c;常常需要针对不同环境&#xff08;测试、预发、线上&#xff09;或不同签名&#xff08;调试、正式&#xff09;输出多个 APP/HAP 包。虽然 HarmonyOS 提供了多目标构建&#xff08;Multi-Target Build&#xff09;能力&#…

qt/c++云对象浏览器

简介 本项目为基于QT5和C11的云对象存储可视化管理工具 源码获取 int main(){ printf("源码联系绿泡泡:%s","joyfelic"); return 0; }

【Ubuntu】提升 docker ps -a 输出的可读性:让 Docker 容器状态更清晰

提升 docker ps -a 输出的可读性&#xff1a;让 Docker 容器状态更清晰 当我们使用 docker ps -a 查看所有 Docker 容器时&#xff0c;输出的信息通常会非常多&#xff0c;尤其是在容器数量较多时。默认输出中包含容器 ID、名称、镜像、状态、端口等信息&#xff0c;容易让人眼…

Spring Security自定义身份认证

尽管项目启动时&#xff0c;Spring Security会提供了默认的用户信息&#xff0c;可以快速认证和启动&#xff0c;但大多数应用程序都希望使用自定义的用户认证。对于自定义用户认证&#xff0c;Spring Security提供了多种认证方式&#xff0c;常用的有In-Memory Authentication…

在亚马逊云服务器上部署WordPress服务

在亚马逊云服务器上部署WordPress服务第一步&#xff1a;创建EC2实例第二步&#xff1a;初始设置与安装第三步&#xff1a;配置MySQL与WordPress第四步&#xff1a;配置Apache与WordPress第五步&#xff1a;访问WordPress第六步&#xff1a;测试数据库连接第七步&#xff1a;使…

Web3.0的认知补充(去中心化)

涉及开发技术&#xff1a; Vue Web3.js Solidity 基本认知 Web3.0含义&#xff1a; 新一代互联网思想&#xff1a;去中心化及用户为中心的互联网 数据&#xff1a;可读可写可授权 核心技术&#xff1a;区块链、NFT 应用&#xff1a;互联网上应用 NFT &…

如何修复宝可梦时时刻刻冒险无法正常工作

宝可梦的时时刻刻冒险模式是一项强大的功能&#xff0c;即使应用程序关闭&#xff0c;它也能追踪你的步行距离。它的工作原理是将你的步数与 iOS 上的 Apple Health 或 Android 上的 Google Fit 同步。它对于孵化宝可梦蛋和赚取好友糖果至关重要&#xff0c;但一旦它停止工作&a…

redis常用集合操作命令

在 Redis 的命令行界面&#xff08;redis-cli&#xff09;中&#xff0c; Redis 的集合&#xff08;Set&#xff09;是无序的&#xff0c;且集合中的元素是唯一的。Redis 本身没有直接提供获取集合中某个特定属性的命令&#xff0c;因为集合中的元素是简单的值&#xff0c;而不…

初识数据结构——二叉树从基础概念到实践应用

数据结构专栏 ⬅(click) 初识二叉树&#xff1a;从基础概念到实践应用&#x1f333; 一、树型结构基础 1.1 树的基本概念 树是一种非线性的数据结构&#xff0c;由n(n>0)个有限节点组成一个具有层次关系的集合。它看起来像一棵倒挂的树&#xff0c;根朝上而叶朝下。 关键特…

驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解

驼峰命名法&#xff08;Camel Case&#xff09;与匈牙利命名法&#xff08;Hungarian Notation&#xff09;详解及对比‌ ‌1. 驼峰命名法&#xff08;Camel Case&#xff09;‌ ‌定义‌ 驼峰命名法&#xff08;Camel Case&#xff09;是一种变量、函数、类等标识符的命名方…

keil 中优化等级的bug

一&#xff0c;问题描述 程序中代码有的执行&#xff0c;有的不执行&#xff0c;仔细研究&#xff0c;查询人工智能。 程序中printf打印后面的代码不执行&#xff0c; 然后过几十个函数又开始正常了。 二.分析问题 跳过函数一般又判断和Goto等语句&#xff0c;其它的溢出和错误…

织梦dedecms网站如何修改上一篇下一篇的标题字数

一般情况下&#xff0c;如果你的上一篇和下一篇是2行布局就不需要限制标题的字数了&#xff0c;如果你要一行布局上一篇和下一篇标题过长就会打乱网页布局&#xff0c;那么限制上一篇和下一篇的标题字数是需要的&#xff0c;避免页面看起来杂乱不堪。 织梦dedecms网站如何修改…

信创系统 sudoers 权限配置实战!从小白到高手

好文链接&#xff1a;实战&#xff01;银河麒麟 KYSEC 安全中心执行控制高级配置指南 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于信创终端操作系统中 sudoers 文件详解的实用文章&#xff01;在 Linux 系统中&#xff0c;sudo 是一项非常重要的权限控制机制…

《明解C语言入门篇》读书笔记四

目录 第四章&#xff1a;程序的循环控制 第一节&#xff1a;do语句 do语句 复合语句&#xff08;程序块&#xff09;中的声明 读取一定范围内的值 逻辑非运算符 德摩根定律 德摩根定律 求多个整数的和及平均值 复合赋值运算符 后置递增运算符和后置递减运算符 练习…