Optional 的基本用法
参考:
https://www.cnblogs.com/xingzc/p/5778090.html
http://www.runoob.com/java/java8-optional-class.html
| empty | static <T> Optional<T> empty()
返回空的 Optional 实例。 |
| equals | boolean equals(Object obj)
判断其他对象是否等于 Optional。 |
| filter | Optional<T> filter(Predicate<? super <T> predicate)
如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。 |
| flatMap | <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional |
| get | T get()
如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException |
| hashCode | int hashCode()
返回存在值的哈希码,如果值不存在 返回 0。 |
| ifPresent | void ifPresent(Consumer<? super T> consumer)
如果值存在则使用该值调用 consumer , 否则不做任何事情。 |
| isPresent | boolean isPresent()
如果值存在则方法会返回true,否则返回 false。 |
| map | <U>Optional<U> map(Function<? super T,? extends U> mapper)
如果存在该值,提供的映射方法,如果返回非null,返回一个Optional描述结果。 |
| of | static <T> Optional<T> of(T value)
返回一个指定非null值的Optional。 |
| ofNullable | static <T> Optional<T> ofNullable(T value)
如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。 |
| orElse | T orElse(T other)
如果存在该值,返回值, 否则返回 other。 |
| orElseGet | T orElseGet(Supplier<? extends T> other)
如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。 |
| orElseThrow | <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常 |
| toString | String toString()
返回一个Optional的非空字符串,用来调试 |
Optional 可以解决空指针异常, 但是, 如果使用不到, 反而会引起更多的问题呢.
比如get 方法, 就可以出现NoSuchElementException , 这就不仅仅是null 的麻烦了, 而是直接出现了 npe, 麻蛋.
java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
null 有时候是无法避免的, 怎么办? 进行isPresent 判断吗? 感觉更加麻烦了... 这样吧: orElse(null)
Optional 的基本用法的更多相关文章
- java8 新特性 -Optional的常见用法
1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...
- 【原创】JAVA8之妙用Optional解决NPE问题
引言 在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示 在这种情况下,有如下代码 user. ...
- c++11实现c++14的optional
c++14中将包含一个std::optional类,它的功能和用法和boost的optional类似.optional<T>内部存储空间可能存储了T类型的值也可能没有存储T类型的值,只有当 ...
- Java8新特性Optional、接口中的默认方法与静态方法
Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...
- Java 8 Optional类使用的实践经验
前言 Java中空指针异常(NPE)一直是令开发者头疼的问题.Java 8引入了一个新的Optional类,使用该类可以尽可能地防止出现空指针异常. Optional 类是一个可以为null的容器对象 ...
- Java8 如何正确使用 Optional
原文出处:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API.善用Optional可以使我们代码中很多繁琐 ...
- java.util.Optional学习笔记
java.util.Optional是Java 8新增的类,作为一个持有实例的容器类,可以帮我们把判空的代码写得更优雅,并且该类还提供了一些实用的api,官方文档在这里,接下来我们通过实战来学习吧: ...
- Java8新特性——Optional
前言 在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现.Java8引入了Optional类,为的就是优雅地处理判空等问题.现在也有很多类库在使用Optional封装返回值,比如Sprin ...
- Java 8新特性(三):Optional类
在上一篇介绍Stream流式数据处理的文章中提到了Optional类,这是Java 8新增的一个类,用以解决程序中常见的NullPointerException异常问题.本篇文章将详细介绍Option ...
随机推荐
- 2 第一个Django应用 第1部分(数据库与模型)
目标应用: 一个公开的网站,可以让访客查看投票的结果并让他们进行投票. 一个后台管理网站,你可以添加.修改和删除选票. 查看django版本 python -c "import django ...
- 唤醒实验(java
package sy;import java.util.Random; public class random { public static void main(String[] args) { / ...
- noj装载问题
描述 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入 多个测例,每个测例的输入占 ...
- 一、fopen与fclose
需要包含的头文件为stdio.h fopen 原型:FILE *fopen(const char *path, const char *mode); 返回:打开成功则返回文件流指针,失败则返回空 参数 ...
- idea设置代码提示不区分大小写
idea设置代码提示不区分大小写 intellij idea默认下的代码提示是区分大小写的,例如类方法名过长.类的名字过长等,完全通过手打的话较为繁琐,这里简单的设置下即可. 把 Case sensi ...
- BOM浏览器
1.window.open(url,ways) url是打开的网页地址 ways 是打开的方式 2.window.close() 3.window.navigator 浏览器用户信息 4.windo ...
- gitlab修改默认端口
部署gitlab的时候,一启动,发现80和8080端口已经被占用,无奈,只得先将监听80端口的nginx和监听8080端口的jenkins停止.这会儿有空,琢磨一下如何修改gitlab的默认端口. 修 ...
- JAVA高级篇(四、JVM垃圾回收和调优)
本文转自https://zhuanlan.zhihu.com/p/25539690 JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会 ...
- Gym - 101617F :Move Away (圆的交点)
pro:给定N个圆,求离原点最远的点,满足它在N个圆里.输出这个距离.N<50; sol:关键点一定是圆与圆的交点. 圆与 圆心到原点的直线 的交点. 然后去验证这些关键点是否在N个圆内. 实际 ...
- 启动tomcat报错Status 状态为 Deployment failed