🍰 个人主页:_小白不加班__
🍞文章有不合理的地方请各位大佬指正。
🍉文章不定期持续更新,如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️
在 Java 8 中,Optional 是一个新的容器类,它被引入以更好地处理可能为 null 的值。Optional 的主要目的是提供一种优雅的方式来避免空指针异常(NullPointerException)

创建一个空的Optional对象Optional
car是一个null,这段代码会立即抛出一个NullPointerExceptionOptional optCar = Optional.of(car); null值的Optional 对象car是null,那么得到的Optional对象就是个空对象。Optional optCar = Optional.ofNullable(car); Optional 是一个容器类,用于封装可能为 null 的值。Optional对象包含一个非空值,那么map方法会根据提供的函数,返回一个新的Optional对象,该对象包含转换后的值。Optional对象为空,则返回一个空的Optional对象。// 保险 @Data public class Insurance { private String name; public String getName() { return name; } } @Test public void test1() { Insurance insurance = new Insurance(); insurance.setName("阳光保险"); Optional name = Optional.ofNullable(insurance).map(Insurance::getName); System.out.println(name);//阳光保险 } @Test public void test2() { Insurance insurance = new Insurance(); Optional name = Optional.ofNullable(insurance).map(Insurance::getName); System.out.println(name);//Optional.empty } flatMap操作中使用 处理嵌套的 Optional 类型。
// 保险 @Data public class Insurance { private String name; public String getName() { return name; } } @Test public void test3() { Optional optInsurance = Optional.ofNullable(new Insurance()); Optional name = optInsurance .flatMap(insurance -> { System.out.println("insurance");//insurance return Optional.ofNullable(insurance.getName()); }); System.out.println(name); /* 结果: insurance Optional.empty */ } @Test public void test4() { Optional optInsurance = Optional.ofNullable(new Insurance()); optInsurance.ifPresent(insurance -> System.out.println(insurance)); } NoSuchElementException异常@Test public void test4() { Insurance insurance = new Insurance(); insurance.setName("保险"); Optional optInsurance = Optional.ofNullable(insurance); System.out.println(optInsurance.get().getName());//保险 } 在 Optional对象不包含值时提供一个默认值。
public String str() { //模拟取值 return null; } /** * orElse */ @Test public void test5() { String s = Optional.ofNullable(str()).orElse("default"); System.out.println(s);//default } public String str() { //模拟取值 return null; } /*** * orElseGet */ @Test public void test6() { Supplier supplier = () -> { return "default"; }; String s = Optional.ofNullable(str()).orElseGet(supplier); System.out.println(s); // default } 指定Supplier抛出的异常
public String strData() { return null; } /** * orElseThrow */ @Test public void test7() { try { Optional.ofNullable(strData()).orElseThrow(RuntimeException::new); } catch (RuntimeException e) { System.out.println("RuntimeException"); } //结果RuntimeException } 是否满足谓词,满足返回包含该值的Optional对选,否则返回Optional.empty
@Test public void test8() { Insurance insurance = new Insurance(); insurance.setName("A保险"); Optional optInsurance = Optional.ofNullable(insurance); optInsurance .filter((Insurance i) -> "A保险".equals(i.getName())) .ifPresent(System.out::println); } Optional类设计时未实现 Serializable接口,无法序列化public class Person { private Optional car; public Optional getCar() { return car; } } OptionalInt、OptionalLong、OptionalDouble 基础类型对象虽然提高了一些性能,但是灵活性大大较低基础类型Optional不支持map flatMap filter中间操作参考:《java8 实战》
🍉文章不定期持续更新,如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️
上一篇:域名被污染了怎么解决问题?
下一篇:域名污染后网站还能正常访问吗?