java8 Optional的使用
2022/7/5 1:20:12
本文主要是介绍java8 Optional的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是opitonal
opitonal类就是Java提供的为了解决大家平时判断对象是否为空用的,用 null!=obj 这样的方式存在的判断,Null Pointer Exception 空指针异常,同时opitonal的存在可以让代码更加简单,可读性跟高,代码写起来更高效.
在了解opitonal之前需要了解四大内置核心函数式接口 https://www.cnblogs.com/lwjQAQ/p/16321930.html
opitonal使用举例: Stream.findOne; Stream.findAll
optional提供三个获取实例的方法。
- empty: 创建一个空的Optional实例
- of: 创建一个Optional值为T的实例,必须不为null 否则直接报错
- ofNullable: 若T不为null,创建Optional 实例,否则创建空实例
public static<T> Optional<T> empty() { Optional<T> t = (Optional<T>) EMPTY; return t; } public static <T> Optional<T> of(T value) { return new Optional<>(value); } public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); }
optional容器类的常用方法
- isPresent() : 判断是否包含值
- orElse(T t) : 如果调用对象包含值,返回该值,否则返回t 默认值
- orElseGet(Supplier s) : 如果调用对象包含值,返回该值,否则返回s获取的值
- map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
- flatMap(Function f): 与map类似,要求返回值必须是Optional
- filter(Predicate p): 如果值存在并且满足提供的谓词,就返回包括该值的Optional对象;否则返回一个空的Optional对象
@Test public void test() { UserInfo userInfo = null; Optional<UserInfo> userInfoOptional = Optional.ofNullable(userInfo); System.out.println(userInfoOptional.isPresent()); if (userInfoOptional.isPresent()) { System.out.println(userInfoOptional.get()); } // orElse返回默认值 UserInfo ofElseUser = userInfoOptional.orElse(new UserInfo("罗文杰", 18, "12345")); System.out.println(ofElseUser); // 使用Supplier函数返回默认值 UserInfo orElseGetUser = userInfoOptional.orElseGet(() -> new UserInfo("罗文杰", 18, "12345")); System.out.println(orElseGetUser); userInfo = new UserInfo("罗文杰", 18, "12345"); userInfoOptional = Optional.ofNullable(userInfo); // map 重新构造返回值 Optional<Object> optionalMap = userInfoOptional.map(item -> { item.setAge(24); return item; }); if (optionalMap.isPresent()) { System.out.println(optionalMap.get()); } // filter过滤 Optional<UserInfo> userInfoOptionalFilter = userInfoOptional.filter(item -> item.getAge() <= 18); if (userInfoOptionalFilter.isPresent()) { System.out.println(userInfoOptionalFilter.get()); } } @Test public void test2() { UserInfo userInfo = null; Optional<UserInfo> userInfoOptional = Optional.of(userInfo); if (userInfoOptional.isPresent()) { System.out.println(userInfoOptional.get()); } } @Test public void test3() { Optional<UserInfo> userInfoOptional = Optional.empty(); if (userInfoOptional.isPresent()) { System.out.println(userInfoOptional.get()); } } }
这篇关于java8 Optional的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略