本文主要介绍糖油包子资料 方法和在新技术下所面对的“挑战”,方便大家深入理解糖油包子资料 过程。本文也将分享糖油包子资料 所遇到的问题和应对策略,怎么解决怎么做的问题。
通过深入本文可以理解代码原理,进行代码文档的下载,也可以查看相应 Demo 部署效果。

什么是Optional容器类

Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常

Optional类常用方法:

Optional.of(T t) : 创建一个 Optional 实例。

Optional.empty() : 创建一个空的 Optional 实例。

Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例。

isPresent() : 判断是否包含值。

orElse(T t) : 如果调用对象包含值,返回该值,否则返回t。

orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值。

orElseThrow(Supplier es) : 当遇到一个不存在的值的时候,并不返回一个默认值,而是抛出异常。

map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()。

flatMap(Function mapper):与 map 类似,要求返回值必须是Optional。

filter(Predicate p):接收一个函数式接口,当符合接口时,则返回一个Optional对象,否则返回一个空的Optional对象。

示例:

 1 import org.junit.Test;  2 import java.util.Optional;  3 /*  4  * Optional 容器类:用于尽量避免空指针异常  5  *     Optional.of(T t) : 创建一个 Optional 实例  6  *     Optional.empty() : 创建一个空的 Optional 实例  7  *     Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例  8  *     isPresent() : 判断是否包含值  9  *     ifPresent(Consumer<? super T> consumer) 判断是否包含值,再执行 consumer 10  *     orElse(T t) :  如果调用对象包含值,返回该值,否则返回t 11  *     orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值 12  *     orElseThrow(Supplier<? extends X> exceptionSupplier) : 当遇到一个不存在的值的时候,并不返回一个默认值,而是抛出异常 13  *     map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty() 14  *     flatMap(Function mapper):与 map 类似,要求返回值必须是Optional 15  *     filter(Predicate<? super T> predicate):接收一个函数式接口,当符合接口时,则返回一个Optional对象,否则返回一个空的Optional对象 16  * 17  *     map、flatMap 和 filter 的使用方法和 StreamAPI 中的一样 18  */ 19 public class TestOptional { 20  21  22     /** 23      * 创建 Optional 实例 24      */ 25     @Test 26     public void test1(){ 27  28         // Optional.empty() : 创建一个空的 Optional 实例 29         Optional<String> empty = Optional.empty(); 30         System.out.println(empty);// 输出结果:Optional.empty 31         //System.out.println(empty.get());// 报错:java.util.NoSuchElementException: No value present 32  33         //    Optional.of(T t) : 创建一个 Optional 实例 34         Optional<Employee> eop = Optional.of(new Employee()); 35         System.out.println(eop);// 输出结果:Optional[Employee{name='null', age=null, gender=null, salary=null, status=null}] 36         System.out.println(eop.get());//输出结果:Employee{name='null', age=null, gender=null, salary=null, status=null} 37  38         //注意:Optional.of(T t) 中,传递给of()的值不可以为空,否则会抛出空指针异常 39         //Optional<Employee> eop1 = Optional.of(null);//这一行直接报错:java.lang.NullPointerException 40  41         //Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例 42         //所以,在创建Optional对象时,如果传入的参数不确定是否会为Null时,就可以使用 Optional.ofNullable(T t) 方式创建实例。 43         Optional<Object> op = Optional.ofNullable(null);//这样的效果和 Optional.empty() 一样 44         System.out.println(op);//Optional.empty 45         op = Optional.ofNullable(new Employee());// 46         System.out.println(op);//Optional[Employee{name='null', age=null, gender=null, salary=null, status=null}] 47     } 48  49  50     /** 51      * isPresent() : 判断是否包含值 52      * ifPresent(Consumer<? super T> consumer) 判断是否包含值,再执行 consumer 53      */ 54     @Test 55     public void test2(){ 56         Optional<Employee> opt = Optional.of(new Employee()); 57         System.out.println(opt.isPresent());//输出结果:true 58         opt = Optional.ofNullable(null); 59         System.out.println(opt.isPresent());//输出结果:false 60         opt.ifPresent(employee -> System.out.println(employee));// 如果 opt.isPresent() 为false ,这里就不输出,否则就输出 employee 61     } 62  63     /** 64      *     orElse(T t) :  如果调用对象包含值,返回该值,否则返回t 65      *     orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值 66      */ 67     @Test 68     public void test3(){ 69         //Optional<Employee> opt = Optional.of(new Employee()); 70         Optional<Employee> opt = Optional.ofNullable(null); 71         /*Employee emp = opt.orElse(new Employee("张三",20)); 72         System.out.println(emp);*/ 73  74         int condition = 2;//模拟条件 75         Employee emp = opt.orElseGet(()-> { 76             if (condition == 1){ 77                 return new Employee("李四"); 78             }else if (condition == 2){ 79                 return new Employee("王二麻子"); 80             }else { 81                 return new Employee("赵六"); 82             } 83         }); 84         System.out.println(emp); 85     } 86     /** 87      *     orElseThrow(Supplier<? extends X> exceptionSupplier) : 当遇到一个不存在的值的时候,并不返回一个默认值,而是抛出异常 88      */ 89     @Test 90     public void test4(){ 91         Object obj = Optional.ofNullable(null).orElseThrow(IllegalArgumentException::new);//当参数为null,则抛出一个不合法的参数异常 92         System.out.println(obj); 93     } 94  95  96 }

备注:map、flatMap 和 filter 的使用方法和 StreamAPI 中的一样,如需了解详细使用方法,请参考:Stream API 详解

 

糖油包子资料部分资料来自网络,侵权毕设源码联系删除

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 糖油包子资料

提供最优质的资源集合

立即查看 了解详情