Java基础之140JDK8之Optional类的使用

Optional容器类(JDK1.8)

Optional容器类(JDK1.8)
这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。

作用 为啥用它 ? 好像是收到返回值不用判断是否为空了 直接使用就可以了 (以后理解了再完善)


创建Optional对象的两种方式
of:
为非null的值创建一个Optional。
在这里插入图片描述
在这里插入图片描述
ofNullable:
为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
在这里插入图片描述
在这里插入图片描述
这个比of更加严谨一些

还有一个创建一个空的Optional对象
在这里插入图片描述


isPresent:
如果值存在返回true,否则返回false。
在这里插入图片描述


get:
如果Optional有值则将其返回,否则抛出NoSuchElementException。
在这里插入图片描述


ifPresent:
如果Optional实例有值则为其调用consumer,否则不做处理 相当于判断吧
下面这句话写的consumer操作是如果有值就打印出来

ifPresent 里面传的是一个Consumer接口 它有一个参数

在这里插入图片描述
orElse:
如果有值则将其返回,否则返回指定的其它值。
在这里插入图片描述
在这里插入图片描述


orElseGet:
orElseGet与orElse方法类似,区别在于得到的默认值。
orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值。
在这里插入图片描述
OrElseGet方法里面传的是一个Supplier接口 里面是一个test方法 test方法里面没有参数
在这里插入图片描述


orElseThrow:
如果有值则将其返回,否则抛出supplier接口创建的异常。
在这里插入图片描述


map:
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
在这里插入图片描述
map 里面传的是一个Function 它有一个参数
在这里插入图片描述
flatMap:
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。
在这里插入图片描述
flatMap里面是一个Mapping 它里面还是一个Function 一个参数
在这里插入图片描述

filter:
如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
在这里插入图片描述
Predicate里面有一个参数
在这里插入图片描述

package com.vince;

import java.util.Optional;

/**
 * Optional JDK1.8容器类
 * @author vince
 * @description
 */
public class OptionalDemo {

	public static void main(String[] args) {
		//创建Optional对象的方式
		Optional<String> optional = Optional.of("bin");
//		Optional<String> optional2 = Optional.ofNullable("bin");
		Optional<String> optional3 = Optional.empty();
		
		System.out.println(optional.isPresent());
		System.out.println(optional.get());
		
		optional.ifPresent((value)->System.out.println(value));
		
		System.out.println(optional.orElse("无值"));
		
		System.out.println(optional.orElseGet(()->"default"));
		
//		try {
//			optional3.orElseThrow(Exception::new);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		
		Optional<String> optional4 = optional.map((value)->value.toUpperCase());
		System.out.println(optional4.orElse("no found"));
		
		optional4 = optional.flatMap((value)->Optional.of(value.toUpperCase()+"-flatMap"));
		System.out.println(optional4.orElse("no found"));
		
		optional4 = optional.filter((value)->value.length()>3);
		System.out.println(optional4.orElse("这个值的长度小于3"));
	}
}

JDK 8引入了一个重要的新特性,即OptionalOptional是一个容器对象,它可能包含null值,也可能包含非null值。使用Optional可以避免空指针异常的发生,并提供了一种更优雅的方式来处理可能为空的值。 Optional的主要作用是封装一个可能为null的值,并提供一些方法来处理这个值。通过使用Optional,我们可以在代码明确地表示一个值可能为空,并在使用这个值时采取相应的处理措施。 下面是一些Optional的常见用法示例: 1. 创建一个Optional对象: ```java Optional<String> optional = Optional.of("value"); ``` 这里使用`Optional.of()`方法创建一个包含非null值的Optional对象。 2. 检查Optional对象是否包含值: ```java optional.isPresent(); // 返回true,表示Optional对象包含值 ``` 通过`isPresent()`方法可以判断Optional对象是否包含值。 3. 获取Optional对象的值: ```java optional.get(); // 返回"value" ``` 使用`get()`方法可以获取Optional对象的值。需要注意的是,如果Optional对象为空,调用`get()`方法会抛出NoSuchElementException异常。 4. 处理Optional对象为空的情况: ```java optional.orElse("default"); // 如果Optional对象为空,返回"default" ``` 使用`orElse()`方法可以指定当Optional对象为空时返回的默认值。 5. 使用Lambda表达式处理Optional对象: ```java optional.ifPresent(value -> System.out.println(value)); ``` `ifPresent()`方法接受一个Lambda表达式作为参数,当Optional对象包含值时,执行Lambda表达式的逻辑。 以上是Optional的一些常见用法,使用Optional可以更加安全地处理可能为空的值,避免空指针异常的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值