如何在Java中使用可选的?
使用optional.empty(),optional.of()和optional.ofnullable()创建可选实例,具体取决于该值是不存在的,非null还是可能为null。 2。使用ISPRESENT()或优选的IFPresent()安全检查值,以避免直接null检查。 3。提供默认值(),ORELSE(),ORELSEGET(),以进行懒惰评估,或在需要时使用Orelsethrow()进行异常。 4。使用MAP()进行简单转换的变换值,flatmap()避免嵌套选项,然后filter()有条件地保留值。 5。将可选的主要用作返回类型应用于信号可选结果,切勿从可选方法中返回null,避免直接.get()调用,并且在字段,参数或集合中不使用可选的。
在Java中使用Optional
是以干净且安全的方式处理潜在null
值的好方法。它是在Java 8中引入的,目的是帮助减少NullPointerException
并使代码的意图更清晰 - 表明值可能存在或可能不存在。

这是有效使用Optional
方法:
✅1。创建可选实例
您可以根据是否存在多种方式创建Optional
对象。

// optional.empty() - 对于零值或缺失值 可选<String> empty = optional.empty(); //可选of(value) - 当值保证为非空的时 可选<string> name = optional.of(“ alice”); //可选的。nullable(value) - 何时值为null 字符串userInput = null; 可选<string> optionalName = optional.ofnullable(userInput); //好吧,返回空的可选
仅当您确定值不是null时,仅使用
of()
。否则,它会引发NullPointerException
。
✅2。安全检查和检索值
不要在不检查的情况下直接访问该值。使用这些方法:

.isPresent()
和.isEmpty()
检查值是否存在。
if(optionalName.ispresent()){ System.out.println(“ Hello”,optionalName.get()); }
但是避免这种样式 - 更像是旧的无效检查。在下面更喜欢功能方法。
.ifPresent(Consumer)
只有在存在值的情况下才能执行一些操作。
optionalName.ifpresent(name-> system.out.println(“ hello,” name));
这是干净且安全的 - 无需手动检查空。
✅3。提供默认值
有时,如果丢失该值,您想要后备。
.orElse(defaultValue)
如果存在,则返回值,否则返回默认值。
字符串结果= optionalName.orelse(“ guest”); system.out.println(结果); //如果可选名称为空,则打印“ guest”
.orElseGet(Supplier)
同样的想法,但是默认是懒惰的(仅在需要时)。
字符串结果= optionalName.orelseget(() - > fetchDefaultName());
当获得默认值时,请使用
orElseGet()
而不是orElse()
(例如,数据库调用)。
.orElseThrow()
如果没有值,请引发例外。
字符串结果= optionalName.orelsethrow( () - >新的IllegalargumentException(“需要名称”) );
非常适合执行所需值。
✅4。转换和过滤值
您可以使用功能方法对Optional
操作进行链操作。
.map(Function)
如果存在,请在Optional
内部转换值。
可选<String> name = optional.of(“ bob”); 可选<string> uppername = name.map(String :: ToupperCase).map(string :: trim); //结果:可选[“鲍勃”]
如果原始Optional
是空的, map
什么都不做 - 没有NullPointerException
。
.flatMap(Function)
当您的映射功能返回另一个Optional
时,请使用。防止嵌套的Optional<Optional<T>>
。
可选<String> email = optional.of(“ alice@example.com”); 可选<integer>长度= email.flatmap(e->) e.contains(“@”)?可选的(e.length()):可选。Empty() );
.filter(Predicate)
仅当值与条件匹配时保持值。
可选<String> validemail = email.filter(e-> e.contains(“@”)); //如果电子邮件不包含'@',结果变为空
对于链条内的验证很有用。
✅5。常见用例
返回类型的方法可能为null的方法:
公共可选<user> finduserbyId(字符串ID){ 用户用户= database.find(id); 返回可选的nullable(用户); }
现在来电者知道结果可能不存在,必须处理。
避免在链条中进行无效检查:
可选<String> city = user.getAddress() .flatmap(地址:: getCity) .map(string :: touppercase);
❌不要这样做
- 切勿从返回
Optional
方法中返回null
。 - 不要在不检查的情况下致电
.get()
- 它仍然可以投掷! - 请勿在字段,方法参数或集合中使用
Optional
(不可序列化,而不是内存有效)。
概括
Optional
有助于编写更安全,更具表现力的代码,从而使无效的代码明确。将其主要用作返回类型,并利用其功能方法(例如map
,filter
和orElse...
。要记住的关键方法:
-
Optional.ofNullable(value)
-
ifPresent()
-
orElse()
,orElseGet()
,orElseThrow()
-
map()
,flatMap()
,filter()
使用良好,
Optional
使您的代码减少了错误的错误,并且更可读。基本上,将其视为可能不存在的值的容器,并始终通过其API与它进行交互,而不是直接访问。
以上是如何在Java中使用可选的?的详细内容。更多信息请关注PHP中文网其他相关文章!
- 切勿从返回

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

AdeadlockinJavaoccurswhentwoormorethreadsareblockedforever,eachwaitingforaresourceheldbytheother,typicallyduetocircularwaitcausedbyinconsistentlockordering;thiscanbepreventedbybreakingoneofthefournecessaryconditions—mutualexclusion,holdandwait,nopree

SpringDataJPA与Hibernate协同工作的核心是:1.JPA为规范,Hibernate为实现,SpringDataJPA封装简化DAO开发;2.实体类通过@Entity、@Id、@Column等注解映射数据库结构;3.Repository接口继承JpaRepository可自动实现CRUD及命名查询方法;4.复杂查询使用@Query注解支持JPQL或原生SQL;5.SpringBoot中通过添加starter依赖并配置数据源、JPA属性完成集成;6.事务由@Transactiona

理解JCA核心组件如MessageDigest、Cipher、KeyGenerator、SecureRandom、Signature、KeyStore等,它们通过提供者机制实现算法;2.使用SHA-256/SHA-512、AES(256位密钥,GCM模式)、RSA(2048位以上)和SecureRandom等强算法与参数;3.避免硬编码密钥,使用KeyStore管理密钥,并通过PBKDF2等安全派生密码生成密钥;4.禁用ECB模式,采用GCM等认证加密模式,每次加密使用唯一随机IV,并及时清除敏
![大声笑游戏设置在关闭后没有保存[固定]](https://img.php.cn/upload/article/001/431/639/175597664176545.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
IfLeagueofLegendssettingsaren’tsaving,trythesesteps:1.Runthegameasadministrator.2.GrantfullfolderpermissionstotheLeagueofLegendsdirectory.3.Editandensuregame.cfgisn’tread-only.4.Disablecloudsyncforthegamefolder.5.RepairthegameviatheRiotClient.

Pattern类用于编译正则表达式,Matcher类用于在字符串上执行匹配操作,二者结合可实现文本搜索、匹配和替换;首先通过Pattern.compile()创建模式对象,再调用其matcher()方法生成Matcher实例,接着使用matches()判断全字符串匹配、find()查找子序列、replaceAll()或replaceFirst()进行替换,若正则包含捕获组,可通过group(n)获取第n组内容,实际应用中应避免重复编译模式、注意特殊字符转义并根据需要使用匹配模式标志,最终实现高效
![CMD中的'未识别Java”错误[3个简单步骤]](https://img.php.cn/upload/article/001/431/639/175588500160220.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
ifjavaisnotRectizedIncmd,确保javaisinstall,setthejava_homevariabletothejdkpath,andaddthejdk'sbinfoldertothesystath.restcmdandcmdandcmdandcmdandrunjava-versiontoconfirm。

Chrome书签编辑简单且实用,用户可通过快捷键Ctrl Shift O(Windows)或Cmd Shift O(Mac)进入书签管理器,也可通过浏览器菜单进入;1.编辑单个书签时,右键点击选择“编辑”,修改标题或网址后点击“完成”保存;2.批量整理书签时,可在书签管理器中按住Ctrl(或Cmd)多选书签,右键选择“移至”或“复制到”目标文件夹;3.导出和导入书签时,点击“整理”按钮选择“导出书签”保存为HTML文件,需要时再通过“导入书签”功能恢复。
