Optional容器类
Optional容器类
of :为非null的值创建一个Optional
ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional
isPresent:如果值存在就返回true,否则就返回false
get:如果Optional有值则将其返回,否则抛出NosSuchElementException
ifPresent:如果Optional实例有值则为其调用consumer,否则不做处理
ofElse:如果有值将其返回,否则返回指定的其他值
orElseGet:orElseGet与orElse方法类似,区别在于得到的默认值,orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
OrElseThrow:如果有值将其返回,否则抛出supplier接口创建的异常
map:如果有值,则对其执行调用mapping函数得到返回值,如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional
flatMap:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatJMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional,调用结束时,flatMap不会对结果用Optional封装
filter:如果有值并且满足断言条件返回包含该值的Optional。否则返回空的Optional。
package com.lili.java8;
import java.util.Optional;
/**
* Optional JDK1.8容器类
* @author: QiJingJing
* @create: 2021/7/14
*/
public class Test5 {
public static void main(String[] args){
// 创建Optional的方式
// 1.of()不能为null
Optional<String> optional1 = Optional.of("abc");
//2 如果传值为空,返回一个空的Optional对象
Optional<String> optional2 = Optional.ofNullable(null);
//3返回一个空的Optional对象
Optional<String> optional3 = Optional.empty();
//如果有值返回true,没有返回false
System.out.println(optional1.isPresent());
// 如果有值将其返回,否则抛出NoSuchElementException
System.out.println(optional1.get());
// 如果有值就打印
optional1.ifPresent(System.out::println);
// 有值就返回,没有就返回你指定的值
System.out.println(optional2.orElse("无值"));
// 有值就返回,没值打印default
String s = optional3.orElseGet(() -> "default");
System.out.println(s);
// 进行操作生成一个新的Optional对象
Optional<String> optional4 = optional1.map(String::toUpperCase);
System.out.println(optional4.orElse("no found"));
//flatMap与map的区别是必须返回Optional对象,需要手动封装Optional对象
Optional<String> optional5 = optional1.flatMap(s1 -> Optional.of(s1.toUpperCase()));
System.out.println(optional5.orElse("no found"));
// filter(过滤)
Optional<String> optional6 = optional1.filter(s1 -> s1.length() > 2);
System.out.println(optional6.orElse("长度小于2"));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!