Optional类方法

Optional类

    • 简介
    • 方法
      • empty()方法
      • of(T value)
      • ofNullable(T value)
      • filter(Predicate<? super T> predicate)
      • get()
      • ifPresent(Consumer<? super T> consumer)
      • isPresent()
      • map(Function<? super T,? extends U> mapper)
      • orElse(T other)
      • orElseGet(Supplier<? extends T> other)
      • flatMap(Function<? super T,Optional<U>> mapper)

简介

可能包含或不包含非空值的容器对象。 如果一个值存在, isPresent()将返回true和get()将返回值。 
提供依赖于存在或不存在包含值的其他方法,例如orElse() (如果值不存在则返回默认值)和ifPresent() (如果值存在则执行代码块)

方法

empty()方法

返回一个空的 Optional实例。 
public static void main(String[] args) {Optional<Object> empty = Optional.empty();System.out.println(empty);
}

在这里插入图片描述

of(T value)

返回具有 Optional的当前非空值的Optional。如果传入空值会报空指针异常
public static void main(String[] args) {Optional<Object> empty = Optional.of(new User("John", "12345"));System.out.println(empty);
}

在这里插入图片描述

ofNullable(T value)

返回一个 Optional指定值的Optional,如果为空,则返回一个空的 Optional 。

filter(Predicate<? super T> predicate)

如果一个值存在,并且该值给定的谓词相匹配时,返回一个 Optional描述的值,
否则返回一个空的 Optional 。
public static void main(String[] args) {Optional<User> optional = Optional.of(new User("John", "12345"));System.out.println(optional);Optional<User> user1 = optional.filter(user -> "John".equals(user.getName()));System.out.println(user1);Optional<User> user2 = optional.filter(user -> "Jane".equals(user.getName()));System.out.println(user2);
}

在这里插入图片描述

get()

如果 Optional中有一个值,返回值,否则抛出 NoSuchElementException 
Optional<User> user = Optional.of(new User("John", "123456"));
System.out.println(user.get());
Optional<User> optional = Optional.empty();
System.out.println(optional.get());

在这里插入图片描述

ifPresent(Consumer<? super T> consumer)

如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
Optional<User> user = Optional.of(new User("John", "123456"));
user.ifPresent(u -> System.out.printf("User name: %s, password: %s", u.getName(), u.getPassword()));
Optional<User> optional = Optional.empty();
optional.ifPresent(u -> System.out.println("User is not present"));

在这里插入图片描述

isPresent()

返回 true如果存在值,否则为 false 。 

map(Function<? super T,? extends U> mapper)

如果存在一个值,则应用提供的映射函数,如果结果不为空,则返回一个 Optional结果的 Optional 。 
Optional<User> user = Optional.of(new User("John", "123456"));
Optional<String> s1 = user.map(User::getName);
System.out.println(s1);
Optional<User> optional = Optional.empty();
Optional<String> s = optional.map(User::getName);
System.out.println(s);

在这里插入图片描述

orElse(T other)

如果Optional容器中无值,则返回other
public static void main(String[] args) {Optional<User> user = Optional.of(new User("John", "123456"));User unknown = user.orElse(new User("Unknown", "000000"));System.out.println(unknown.getName());Optional<User> optional = Optional.empty();User unknown1 = optional.orElse(new User("Unknown", "000000"));System.out.println(unknown1.getName());
}

orElseGet(Supplier<? extends T> other)

返回值(如果存在),否则调用 other并返回该调用的结果。适合需要进行一些操作然后得到值的场景
public static void main(String[] args) {Optional<User> user = Optional.of(new User("John", "123456"));User unknown = user.orElseGet(() -> {User user2 = new User();user2.setName("Unknown2");user2.setPassword("000000");return user2;});System.out.println(unknown.getName());Optional<User> optional = Optional.empty();User unknown2 = optional.orElseGet(() -> {User user2 = new User();user2.setName("Unknown2");user2.setPassword("000000");return user2;});System.out.println(unknown2.getName());
}

在这里插入图片描述

flatMap(Function<? super T,Optional> mapper)

如果一个值存在,应用提供的 Optional映射函数给它,返回该结果,否则返回一个空的 Optional 。 
public static void main(String[] args) {Optional<String> user = Optional.of("John");Optional<User> user1 = user.flatMap(name -> Optional.of(new User(name, "password")));System.out.println(user1.get().getPassword());Optional<String> empty = Optional.empty();Optional<User> password = empty.flatMap(name -> Optional.of(new User(name, "password")));System.out.println(password);
}

在这里插入图片描述

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

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

相关文章

LeetCode 子集

原题链接78. 子集 - 力扣&#xff08;LeetCode&#xff09; 这是一道暴力搜索问题参考大佬们的题解&#xff0c;对这类题目做出一下总结 1.确定递归参数变量 2.递归结束条件 3.做出选择&#xff0c;递归调用进入下一层 4.回溯&#xff0c;返回到递归前的状态 要完成前面这…

最新扣子(Coze)实战案例:图像流工具之创建一个精美的LOGO,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

商家团购app微信小程序模板

手机微信商家团购小程序页面&#xff0c;商家订餐外卖小程序前端模板下载。包含&#xff1a;团购主页、购物车订餐页面、我的订单、个人主页等。 商家团购app微信小程序模板

linux-内存映射MMAP-lseek-dup-fifo-通信-IO多路复用

1、内存映射MMap&#xff1a; DMA&#xff1a; 可以用*/[]取代read和write&#xff1b; 限制&#xff1a; 1、文件大小固定不能改变&#xff1b;&#xff08;ftruncate&#xff09; 2、只能是磁盘文件&#xff1b; 3、建立映射之前先open mmap函数&#xff1a; mmap第一个…

生产环境 CentOS 7 k8s v1.28.0离线部署

背景描述&#xff1a;CentOS 7 Kubernetes 离线部署 随着云计算和微服务架构的普及&#xff0c;Kubernetes&#xff08;K8s&#xff09;已经成为容器编排的标准工具。它能够自动化应用的部署、扩展和管理&#xff0c;使得开发和运维的工作更加高效和可靠。然而&#xff0c;在一…

腾讯开源高质量人类运动视频的框架;通过音频指令修改图像;利用YOLO分析网球视频;Gemma-2中文微调模型

✨ 1: MimicMotion MimicMotion 腾讯开源的通过姿态指导生成高质量任意长度人类运动视频的框架 MimicMotion 是一种可控视频生成框架&#xff0c;旨在生成高质量的任意长度人物动作视频&#xff0c;采用带有置信度的姿态引导&#xff0c;并通过区域损失放大来缓解图像失真。其…

C++视觉开发 三.缺陷检测

一.距离变换 1.概念和功能 距离变换是一种图像处理技术&#xff0c;用于计算图像中每个像素到最近的零像素&#xff08;背景像素&#xff09;的距离。它常用于图像分割、形态学操作和形状分析等领域。它计算图像中每个像素到最近的零像素&#xff08;背景像素&#xff09;的距…

苍穹外卖--sky-take-out(五)前端

大部分笔记都是写在语雀的&#xff0c;这是一次性从本人语雀复制过来的&#xff0c;可能结构有些错乱 基础创建 环境要求 node.js npm Vue CLI 创建前端工程 使用vue ui命令创建 项目结构 启动项目 打开命令行窗口 快捷键ctrlj 或者 运行 输入&#xff1a;npm run ser…

010-GeoGebra基础篇-动态验证三角形外接圆的圆心是否可以位于三角形的外部

接下来我们将进行一些稍微高级一点操作&#xff0c;一边学习新东西的同时&#xff0c;也开始对数学、物理等内容的研究。 目录 一、项目截图二、涉及内容三、问题设置1. 问题提出2. 验证方案 三、做图步骤1. 绘制定点A、B&#xff1b;2. 绘制动点C&#xff1b;&#xff08;1&am…

万界星空科技铜管加工行业MES系统解决方案

一、行业背景与挑战 随着铜管加工行业的快速发展&#xff0c;传统的管理模式已难以满足日益增长的生产需求。为满足市场的高效率、高质量、低成本要求&#xff0c;企业急需一套智能化的管理系统来提升生产效率、优化资源配置和确保产品质量。因此&#xff0c;我们针对铜管加工行…

常用的限流算法有哪些?你听说过几种?

限流&#xff0c;就是指限制流量请求的频次。 在高并发情况下&#xff0c;它是一种保护系统的策略&#xff0c;避免了在流量高峰时系统崩溃&#xff0c;造成系统的不可用。 常见的限流算法有&#xff1a; 计数器限流算法滑动窗口限流算法漏桶限流算法令牌桶限流算法 1. 计数器…

【Python程序开发系列】教你使用Docker部署一个简单的Python应用程序(案例+源码)

这是我的第313篇原创文章。 一、引言 Docker 对于程序员来说&#xff0c;其实和Git差不多&#xff0c;基本上属于一个必备工具。如果你想使用这个工具&#xff0c;你就必须安装这个应用工具&#xff0c;至于在不同操作系统上安装Docker的方式网上有很多教程&#xff0c;这里不…

每天五分钟深度学习:解决for循环效率慢的关键在于向量化

本文重点 上一节课程中,我们学习了多样本的线性回归模型,但是我们的伪代码实现中使用了大量的for循环,这样代码的问题是效率很低。为了克服这一瓶颈,向量化技术应运而生,成为提升程序执行效率、加速数据处理速度的重要手段。 向量化技术概述 向量化(Vectorization)是…

MySQL-核心知识要点

1、索引的数据结构-Btree BTree的优势&#xff1a; B树的内节点无data&#xff0c;一个节点可以存储更多的K-V对。在构造树时&#xff0c;需要的内节点会更少&#xff0c;那么树的层级也会越低。查询一条数据时&#xff0c;1. 扫描的层级低&#xff0c;扫描过的节点更少&…

【netty系列-04】反应堆模式的种类和具体实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

数字化转型中,数字化如何重塑中小企业发展力?

引言&#xff1a;当前&#xff0c;我国中小微企业数字化转型处于“不平衡、不充分、不规范”阶段&#xff0c;普遍面临“不会转”“不能转”“不敢转”的困境。数字化转型可以帮助企业突破这些困境&#xff0c;实现更大的发展。更进一步&#xff0c;数字化转型是中小企业高质量…

学习笔记——动态路由——IS-IS中间系统到中间系统(基本概念)

二、IS-IS基本概念 1、IS-IS概述 IS-IS是ISO定义的OSI协议栈中的无连接网络服务(ConnectionLess Network Service&#xff0c;CLNS)的一部分&#xff0c;IS-IS是一种链路状态路由协议&#xff0c;IS-IS与OSPF在许多方面非常相似&#xff0c;例如&#xff0c;运行IS-IS协议的直…

4.BeanFactory

可以看出BeanFactory表面上只有getBean相关的方法。 实际上控制反转、基本的依赖注入、Bean的生命周期的各种功能&#xff0c;都是由BeanFactory的实现类来实现的。&#xff08;DefaultListableBeanFactory&#xff09; DefaultListableBeanFactory管理单例对象DefaultSinglet…

杨万里,诚斋体的开创者

杨万里&#xff0c;字廷秀&#xff0c;号诚斋&#xff0c;生于南宋绍兴元年&#xff08;公元1127年&#xff09;&#xff0c;卒于南宋庆元二年&#xff08;公元1206年&#xff09;&#xff0c;享年79岁。在中国古代文学的璀璨星河中&#xff0c;南宋诗人杨万里以其清新脱俗、贴…

Android- Framework 非Root权限实现修改hosts

一、背景 修改system/etc/hosts&#xff0c;需要具备root权限&#xff0c;而且remount后&#xff0c;才能修改&#xff0c;本文介绍非root状态下修改system/etc/hosts方案。 环境&#xff1a;高通 Android 13 二、方案 非root&#xff0c;system/etc/hosts只有只读权限&…