目录
✅1。创建可选实例
✅2。安全检查和检索值
.isPresent().isEmpty()
.ifPresent(Consumer)
✅3。提供默认值
.orElse(defaultValue)
.orElseGet(Supplier)
.orElseThrow()
✅4。转换和过滤值
.map(Function)
.flatMap(Function)
.filter(Predicate)
✅5。常见用例
❌不要这样做
概括
首页 Java java教程 如何在Java中使用可选的?

如何在Java中使用可选的?

Aug 22, 2025 am 10:27 AM
java optional

使用optional.empty(),optional.of()和optional.ofnullable()创建可选实例,具体取决于该值是不存在的,非null还是可能为null。 2。使用ISPRESENT()或优选的IFPresent()安全检查值,以避免直接null检查。 3。提供默认值(),ORELSE(),ORELSEGET(),以进行懒惰评估,或在需要时使用Orelsethrow()进行异常。 4。使用MAP()进行简单转换的变换值,flatmap()避免嵌套选项,然后filter()有条件地保留值。 5。将可选的主要用作返回类型应用于信号可选结果,切勿从可选方法中返回null,避免直接.get()调用,并且在字段,参数或集合中不使用可选的。

如何在Java中使用可选的?

在Java中使用Optional是以干净且安全的方式处理潜在null值的好方法。它是在Java 8中引入的,目的是帮助减少NullPointerException并使代码的意图更清晰 - 表明值可能存在或可能不存在。

如何在Java中使用可选的?

这是有效使用Optional方法:


✅1。创建可选实例

您可以根据是否存在多种方式创建Optional对象。

如何在Java中使用可选的?
 // 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。安全检查和检索值

不要在不检查的情况下直接访问该值。使用这些方法:

如何在Java中使用可选的?

.isPresent().isEmpty()

检查值是否存在。

 if(optionalName.ispresent()){
    System.out.println(“ H​​ello”,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(“@”));
//如果电子邮件不包含&#39;@&#39;,结果变为空

对于链条内的验证很有用。


✅5。常见用例

  • 返回类型的方法可能为null的方法

    公共可选<user> finduserbyId(字符串ID){
        用户用户= database.find(id);
        返回可选的nullable(用户);
    }

    现在来电者知道结果可能不存在,必须处理。

  • 避免在链条中进行无效检查

    可选<String> city = user.getAddress()
                                .flatmap(地址:: getCity)
                                .map(string :: touppercase);

    ❌不要这样做

    • 切勿从返回Optional方法中返回null
    • 不要在不检查的情况下致电.get() - 它仍然可以投掷!
    • 请勿在字段,方法参数或集合中使用Optional (不可序列化,而不是内存有效)。

    概括

    Optional有助于编写更安全,更具表现力的代码,从而使无效的代码明确。将其主要用作返回类型,并利用其功能方法(例如mapfilterorElse...

    要记住的关键方法:

    • Optional.ofNullable(value)
    • ifPresent()
    • orElse()orElseGet()orElseThrow()
    • map()flatMap()filter()

    使用良好, Optional使您的代码减少了错误的错误,并且更可读。

    基本上,将其视为可能不存在的值的容器,并始终通过其API与它进行交互,而不是直接访问。

    以上是如何在Java中使用可选的?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java的僵局是什么,您如何防止它? Java的僵局是什么,您如何防止它? Aug 23, 2025 pm 12:55 PM

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

如何在Java中使用可选的? 如何在Java中使用可选的? Aug 22, 2025 am 10:27 AM

useoptional.empty(),可选of(),andoptional.ofnullable()

Java持续使用弹簧数据JPA和Hibernate Java持续使用弹簧数据JPA和Hibernate Aug 22, 2025 am 07:52 AM

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

用于安全编码的Java加密体系结构(JCA) 用于安全编码的Java加密体系结构(JCA) Aug 23, 2025 pm 01:20 PM

理解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,并及时清除敏

大声笑游戏设置在关闭后没有保存[固定] 大声笑游戏设置在关闭后没有保存[固定] Aug 24, 2025 am 03:17 AM

IfLeagueofLegendssettingsaren’tsaving,trythesesteps:1.Runthegameasadministrator.2.GrantfullfolderpermissionstotheLeagueofLegendsdirectory.3.Editandensuregame.cfgisn’tread-only.4.Disablecloudsyncforthegamefolder.5.RepairthegameviatheRiotClient.

如何在Java中使用模式和匹配器类? 如何在Java中使用模式和匹配器类? Aug 22, 2025 am 09:57 AM

Pattern类用于编译正则表达式,Matcher类用于在字符串上执行匹配操作,二者结合可实现文本搜索、匹配和替换;首先通过Pattern.compile()创建模式对象,再调用其matcher()方法生成Matcher实例,接着使用matches()判断全字符串匹配、find()查找子序列、replaceAll()或replaceFirst()进行替换,若正则包含捕获组,可通过group(n)获取第n组内容,实际应用中应避免重复编译模式、注意特殊字符转义并根据需要使用匹配模式标志,最终实现高效

CMD中的'未识别Java”错误[3个简单步骤] CMD中的'未识别Java”错误[3个简单步骤] Aug 23, 2025 am 01:50 AM

ifjavaisnotRectizedIncmd,确保javaisinstall,setthejava_homevariabletothejdkpath,andaddthejdk'sbinfoldertothesystath.restcmdandcmdandcmdandcmdandrunjava-versiontoconfirm。

编辑Chrome的书签 编辑Chrome的书签 Aug 27, 2025 am 12:03 AM

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

See all articles