java8根据某个id删选_Java 8可选:如何使用它

java8根据某个id删选

Java 8带有新的Optional类型,类似于其他语言中可用的类型。 这篇文章将介绍这种新类型的使用方式,即主要用途。

什么是可选类型?

可选的是新容器类型,如果有可用值,则该容器类型将包装单个值。 因此,这意味着要传达可能缺少该值的含义。 以这种方法为例:

public Optional<Customer> findCustomerWithSSN(String ssn) {...
}

返回Optional显式增加了该给定的社会保险号可能没有客户的可能性。

这意味着类型系统明确地迫使方法的调用者考虑并处理可能没有使用该SSN的客户的可能性。

呼叫者将必须执行以下操作:

Optional<Customer> optional = findCustomerWithSSN(ssn);if (optional.isPresent()) {Customer customer = maybeCustomer.get();... use customer ...
}
else {... deal with absence case ...
}

否则,请提供默认值:

Long value = findOptionalLong(ssn).orElse(0L);

可选的用法有点类似于抛出检查异常的更熟悉的情况。 通过抛出一个已检查的异常,我们使用编译器来强制API的调用者以某种方式处理异常情况。

可选试图解决什么?

可选的方法是尝试通过增加构建更具表现力的API的可能性来减少Java系统中空指针异常的数量,这些API解释了有时缺少返回值的可能性。

如果从一开始就存在Optional,那么大多数库和应用程序可能会更好地处理缺少的返回值,从而减少了空指针异常的数量以及总体上的错误总数。

那么应该如何使用Optional?

可选应该用作可能不返回值的函数的返回类型

这是来自OpenJDK邮件列表的报价 :

“ JSR-335 EG相当强烈地认为,“可选”的使用不应超过仅支持“可选-返回”惯用语所需要的数量。

有人建议甚至将其重命名为OptionalReturn”

在域驱动程序开发的上下文中,这意味着Optional应该用作某些服务,存储库或实用程序方法的返回类型,例如上面显示的方法。

什么是可选的,不尝试解决

可选并不意味着是一种避免所有类型的空指针的机制。 例如,仍然必须测试方法和构造函数的强制输入参数。

与使用null时一样,Optional不能帮助传达缺失值的含义 。 以类似的方式,null可能意味着很多不同的东西(找不到值等),因此缺少Optional值也可以。

该方法的调用者仍然必须检查该方法的javadoc以了解缺少的Optional的含义,以便对其进行正确处理。

同样,可以将被检查的异常捕获在一个空块中,这也没有类似的方法阻止调用方调用get()并继续前进。

仅返回null有什么问题?

问题在于该函数的调用者可能没有阅读该方法的javadoc,而忘记了处理null的情况。

这经常发生,并且是空指针异常的主要原因之一,尽管不是唯一的原因。

如何不使用可选?

可选不打算在这些情况下使用,因为它不会给我们带来任何好处:

  • 在域模型层(不可序列化)
  • 在DTO中(相同原因)
  • 在方法的输入参数中
  • 在构造函数参数中

Optional对函数式编程有何帮助?

在链接的函数调用中,Optional提供了ifPresent()方法,该方法允许链接可能不返回值的函数:

findCustomerWithSSN(ssn).ifPresent(() -> System.out.println("customer exists!"));

有用的链接

Oracle的这篇博客文章进一步介绍了Optional及其用法,并将其与其他语言的类似功能进行了比较– 厌倦了Null指针异常?

该备忘单提供了Optional – Java 8 Cheat Sheet中的Optional的全面概述。

翻译自: https://www.javacodegeeks.com/2014/06/java-8-optional-how-to-use-it.html

java8根据某个id删选

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

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

相关文章

Java中的瞬态关键字及其使用

最近&#xff0c;我在一个朋友的一个研究项目中遇到了十字架&#xff0c;他们正在学习Java编程的基础知识&#xff0c;一些忘记的敏感信息打印在文本文件中&#xff0c;并记住了Java中的瞬时关键字。 Java中的瞬时关键字在安全性方面起着重要作用&#xff0c;并且在上述类似的…

RS-232/E1协议转换器产品介绍

RS-232/E1协议转换器是我公司自主研发生产的高性能产品&#xff0c;它将透明E1转换为V.35或者RS232的异步数据接口的接口转换设备&#xff0c;本设备V.35接口可以连接DCE或DTE两种工作方式的设备&#xff0c;RS232接口只支持异步RS232数据&#xff0c;可支持的最高异步速率为11…

java ee cdi_Java EE CDI限定词:快速浏览

java ee cdi在上下文和依赖注入&#xff08;CDI&#xff09;中&#xff0c; 限定符是类型安全和松散耦合的主体。 为什么&#xff1f; 没有CDI&#xff0c;我们将以类似于下面的方式注入Java EE组件 注意&#xff1a;这实际上不会编译&#xff0c;只是假设的代码片段 例子1 …

什么是串口协议转换器?串口转换器有哪些特点?

串口转换器是为RS-232/485/422到TCP/IP之间完成数据转换的通讯接口转换器。通过作为服务器端&#xff0c;提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输&#xff0c;提供串口转网络功能&#xff0c;RS-232/485/422转网络的解决方案&#xff0c;可以让串口设备立即…

485转232转换器产品介绍及性能参数介绍

配有不同标准串行接口的计算机、外部设备或智能仪器之间进行远程数据通信&#xff0c;需要进行标准串行接口的相互转换。485转换器将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号。RS-485、RS-422自动识别功能&#xff0c;使用更加简单。接下来我们就来为大家详细介绍下…

什么是RS232/RS485转换器?

485转以太网提供串口转网络功能&#xff0c;能够将RS-232/485/422串口转换成TCP/IP网络接口&#xff0c;实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能&#xff0c;连接网络进行数据通信&#xff0c;极大的扩展串口设…

apache jmx_用于JMX访问的Apache Ant任务

apache jmx我想从Ant任务中调用JMX操作。 但是&#xff0c;找到可用的蚂蚁任务库及其用法非常棘手。 因此&#xff0c;让我分享我的经验&#xff0c;使他人更轻松。 JMX操作的Ant任务 我决定遵循Tomcat文档&#xff0c;并使用与tomcat一起分发的ant任务。 仅作记录用途&#…

E1协议转换器使用中常见故障问题及处理方法总结

E1协议转换器也叫接口转换器&#xff0c;是实现数据通信网以太网接口与光纤通信传送网E1接口连接时进行两种接口转换的设备。广泛应用在传输站E1接口与网络交换机相连时的接口转换中。现飞畅科技小编对其使用过程中常见故障及解决方法进行归纳&#xff0c;希望对大家在应用此类…

使JavaDoc保持最新状态的工具

在许多项目中&#xff0c;文档不是最新的。 更改代码后&#xff0c;很容易忘记更改文档。 原因是可以理解的。 在代码中进行更改&#xff0c;然后调试&#xff0c;然后希望在测试中进行更改&#xff08;或者&#xff0c;如果您使用的是更多TDD&#xff0c;则以相反的顺序进行更…

RS485转换器常见问题总结

通讯转换器主要应用于支持RS485通讯总线结构的工业控制自动化系统&#xff0c;其中包括一卡通、门禁系统、消费系统、考勤系统、、监控、楼宇对讲、停车场系统、自助银行系统、公共汽车收费系统、公路收费站系统等等。但是&#xff0c;我们在使用485转换器的过程中难免会遇到各…

hd-sdi转hdmi转换器产品规格参数及接口定义详解

hd-sdi转hdmi转换器可方便的将HD-SDI 信号转为HDMI 信号&#xff0c;同时会将SDI所带音频信号分离转换后嵌入到HDMI 信号中&#xff0c;以实现声音及图像同步传输。专为电视台、平安城市、公安交警、高速公路、应急指挥中心的高清视频显示等环境提供项目解决方案。接下来就由飞…

singleton设计模式_Java Singleton设计模式

singleton设计模式它是Java中最简单的设计模式之一。 如果有人问我哪种设计模式好&#xff0c;那么我会很自豪地说Singleton。 但是&#xff0c;当他们深入询问单身人士的概念时&#xff0c;我感到很困惑。 真的单身是那么困难吗&#xff1f; 确实不是&#xff0c;但是它有…

HD-SDI转HDMI转换器工作原理及功能介绍

高清HD-SDI转HDMI转换器是一款专用于单路高清数字分量串行接口(HD-SDI和3G-SDI)信号转换为HDMI信号的设备。该设备集成SDI接收器及HDMI调制器&#xff0c;可方便的将HD-SDI信号转为HDMI信号&#xff0c;同时会将SDI所带音频信号分离转换后嵌入到HDMI信号中&#xff0c;以实现声…

注释处理和JPMS

TLDR&#xff1b; 代替annotation.getClass().getMethod("value")调用annotation.annotationType().getMethod("value") 。 所有Java开发人员都听说过注释。 自Java 1.5&#xff08;或者您坚持认为只有1.6&#xff09;以来&#xff0c;我们便有了注释。 根…

HD-SDI转HDMI转换器怎么连接?hd-sdi转hdmi转换器常见故障有哪些?

高清HD-SDI转HDMI转换器是一款专用于单路高清数字分量串行接口(HD-SDI和3G-SDI)信号转换为HDMI信号的设备。hd-sdi转hdmi转换器将广播级输出图像使用的SDI信号转换成HDMI影像信号&#xff0c;中继广播与消费型产品的链接器&#xff0c;让SDI信号格式不用经剪辑软件再一次的转换…

sdi转hdmi转换器应用领域及规格参数详解

SDI转HDMI转换器 是一款专用于单路高清数字分量串行接口(HD-SDI&#xff0c;3G-SDI和SD-SDI)信号转换为HDMI 信号的设备。该设备集成SDI 接收器及HDMI 调制器&#xff0c;可方便的将SDI 信号转为HDMI 信号&#xff0c;同时会将SDI所带音频信号分离转换后嵌入到HDMI 信号中&…

Cassandra中的数据建模

在关系数据模型中&#xff0c;我们为域中的每个对象建模关系/表。 对于Cassandra&#xff0c;情况并非如此。本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面。 以下是Cassandra数据建模的粗略概述。 从上图可以看出&#xff0c; 概念数据建模和应用程序查询是构…

485串口光纤转换器产品介绍

光纤转换器是RS-232/422/485串行数据通过光纤的远距离传输&#xff0c;可以完成串口到光纤的转换&#xff0c;并且可以延长串行通信信号的传输距离。接下来我们就跟随飞畅科技的小编一起来详细了解下光纤转换器的转换类别有哪些&#xff1f;一起来看看吧&#xff01; 光纤转换器…

什么是485转光纤?485光纤转换器功能特点及技术参数详解

RS485转光纤转换器实现一路RS-485在光纤上的透明传输&#xff0c;由于采用光纤通信&#xff0c;解决了电磁干扰、地环干扰和雷电破坏的难题&#xff0c;大大提高了数据通讯的可靠性、安全性和保密性&#xff0c;可广泛用于各种工业控制、过程控制、交通控制和分布式数据采集等场…

可视对讲网络协议转换器怎么使用,协议转换器使用方法详细介绍

对于可视对讲网络协议转换器使用方法这块&#xff0c;可能很多人对此都不是很理解&#xff0c;在这里&#xff0c;我们首先来了解下可视对讲的原理&#xff0c;以便大家更好的了解接下来的内容。今天&#xff0c;杭州飞畅的小编就来为大家详细介绍下可视对讲网络协议转换器的使…