Java Optional 学习与使用

本文探讨了Java Optional类的使用,包括如何创建实例、判空、转化值和过滤值的方法。通过示例,展示了Optional如何简化代码,避免空指针异常,并在高并发系统中优化性能。此外,解释了Optional在实际项目中的主要作用,特别是在Spring Boot Data JPA中的应用。
摘要由CSDN通过智能技术生成

前言

最近在使用SpringBoot data JPA相关接口的时候发现,许多接口的返回类型都从传统的泛型<T>转化为了Optional<T>,而且我们所常用的List等也用了迭代器Iterable进行代替,其中原因是很值得我们去深究的,使用了此类接口有何优势,为何要替代,此类接口的实现方法等

类的方法

从jdk源码中我们可以很快速找到Optional的相关方法:

方法 描述
empty() 返回空的 Optional 实例。
of(T) 返回一个指定非null值的Optional。
ofNullable(T) 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。
get() 返回包含的对象
isPresent() 如果值存在则方法会返回true,否则返回 false。
isEmpty() 判空
ifPresent(Consumer<? super T> action) 如果值存在则使用该值调用 consumer , 否则不做任何事情。
ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) ifPresentOrElse 方法的改进就是有了 else,接受两个参数 Consumer 和 Runnable.ifPresentOrElse 方法的用途是,如果一个 Optional 包含值,则对其包含的值调用函数 action,即 action.accept(value),这与 ifPresent 一致;与 ifPresent 方法的区别在于,ifPresentOrElse 还有第二个参数 emptyAction —— 如果 Optional 不包含值,那么 ifPresentOrElse 便会调用 emptyAction,即 emptyAction.run()。
filter(Predicate<? super T> predicate) 如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。
flatMap(Function<? super T, ? extends Optional<? extends U>> mapper) 如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional
or(Supplier<? extends Optional<? extends T>> supplier)
Stream stream() stream 方法的作用就是将 Optional 转为一个 Stream,如果该 Optional 中包含值,那么就返回包含这个值的 Stream,否则返回一个空的 Stream(Stream.empty())。
orElse(T other) 如果值存在,返回 Optional 指定的值,否则返回一个预设的值。
orElseGet(Supplier<? extends T> supplier) 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。
orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常
equals(Object obj) 判等
hashCode() 返回存在值的哈希码,如果值不存在 返回 0。
toString()

首先我们看看这个Optional的介绍:
A container object which may or may not contain a non-{@code null} value. If a value is present, {@code isPresent()} returns {@code true}. If no value is present, the object is considered <i>empty</i> and {@code isPresent()} returns {@code false}.
翻译过来,Optional类就是一个允许object为空的容器,提供了isPresent来判断是否为空。

PS:jdk源码屎山名不虚传,翻都不知道怎么翻,不如直接看实战吧!

实际中的使用

简单的创建Optionnal实例

import java.util.Optional;
 
public class Java8Tester {
   
   public static void main(String args[]){
   
   
      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);
        
      // Optional.ofNullable - 允许传递为 null 参数
      Optional<Integer> a = Optional.ofNullable(value1);
        
      // Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值