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"));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值