Java 8 Optional
这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
package com.polaris; import java.util.Arrays; import java.util.List; import java.util.Optional; /** * @author :sixinshuier * @date :Created in 2020/6/3 14:35 * @description:java 8 optional * @modified By: */ public class TestOptional { public static void main(String[] args) { //1. of 为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException 。 Optional<String> name = Optional.of("polaris"); //2. isPresent() 如果有值,则返回true,否则返回false if (name.isPresent()) { System.out.println(name.get());//如果Optional有值则将其返回,否则抛出NoSuchElementException。 } Optional<String> name1 = Optional.of(""); // isPresent() 如果有值,则返回true,否则返回false if (name1.isPresent()) { System.out.println(name1.get());//如果Optional有值则将其返回,否则抛出NoSuchElementException。 } // 3. ifPresent 如果Optional实例有值则为其调用consumer,否则不做处理 name.ifPresent((value) -> { System.out.println("lambda value" + value); }); // 4. orElse ,orElseGet orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值 System.out.println(name1.orElse("polaris1")); System.out.println(name1.orElseGet(() -> "defalue value")); System.out.println(name1.orElseGet(String::new)); //5. orElseThrow 如果有值则将其返回,否则抛出supplier接口创建的异常 name1.orElseThrow(IllegalArgumentException::new); // 6.map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。 Optional<String> upperName = name.map((value) -> value.toUpperCase()); System.out.println(upperName.orElse("No value found")); //7. flatMap 如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap方法与map方法类似,区别在于mapping函数的返回值不同。map方法的mapping函数返回值可以是任何类型T,而flatMap方法的mapping函数必须是Optional。 upperName = name.flatMap((value) -> Optional.of(value.toUpperCase())); System.out.println(upperName.get()); //8. filter 如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。 List<String> names = Arrays.asList("polaris", "start"); for (String s : names) { Optional<String> nameLenLessThan7 = Optional.of(s).filter((value) -> value.length() < 7); System.out.println(nameLenLessThan7.orElse("The name is more than 6 characters")); } } }
不要小瞧女程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具