目录
第一节:optional类
一、optional类概述
1、optional类
Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或者不存在,原来用null表示一个值不存在,现在optional可以更好地表达这个概念,并且可以避免空指针异常;另外,可以通过optional抛出的异常,快速的定位到一场所在的位置,便于调试;
2、optional类常用方法
1)、Optional.of(T t);
该方法用于创建一个optional实例;
2)、Optional.empty();
该方法用于创建一个空的Option实例;
3)、Optional.ofNullable(T t);
如t不为null,则创建Optional实例,否则创建空实例;
4)、isPresent();
该方法用于判断是否包含值;
5)、orElse(T t);
该方法用于调用对象包含值、返回值、否则返回t;
6)、orElseGet(Supplier s);
该方法用于调用对象包含值,返回该值,否则返回s获取的值;
7)、map(Functioon f);
如果有值对其进行处理,并返回处理后的optional,否则返回option.empty();
8)、flatMap(Function mapper);
与map类似,要求返回值必须是Optional;
二、optional类概示例
1、代码示例
package optional;
import java.util.Optional;
import 为什么要使用lambad表达式.entity.Employee; import 为什么要使用lambad表达式.entity.Employee.Status;
public class TestOptional {
public static void main(String[] args) { //test1(); //test2(); //test3(); //test4(); //test5(); //test6(); //test7(); test8(); }
/** * 构建一个optional并获取其中的实例 */ public static void test1() { //构建一个optional Optional<Employee> op = Optional.of(new Employee()); //获取optional中的实例 Employee employee = op.get(); System.out.println(employee); }
/** * 构建一个为null(空)的optional */ public static void test2() { Optional<Object> empty = Optional.empty(); System.out.println(empty.get()); }
/** * 如t不为null,则创建Optional实例,否则创建空optional实例; */ public static void test3() { //is not null Optional<Employee> op1 = Optional.ofNullable(new Employee()); System.out.println(op1.get());
//为null Optional<Employee> op2 = Optional.ofNullable(null); System.out.println(op2.get()); }
/** * 判断是否包含值 */ public static void test4() { Optional<Employee> op = Optional.ofNullable(null); if(op.isPresent()) { op.get(); }else { System.out.println("optional中值为null"); } }
/** * 如果op中包含值,则返回该值; * 如果op中不包含值,则返回一个替代实例; */ public static void test5() { Optional<Employee> op = Optional.ofNullable(null); System.out.println(op.orElse(new Employee())); }
/** * 如果op中包含值,则返回该值; * 如果op中不包含值,则返回一个Supplier获取的值 * 在Supplier中,我们可以实现各种逻辑的处理后, * 返回一个比较有好的或者合乎业务逻辑的值; */ public static void test6() { Optional<Employee> op = Optional.ofNullable(null); System.out.println(op.orElseGet(()->{ /* * 在这里可以实现五花八门的逻辑 */ return new Employee(); })); }
/** * 如果有值对其进行处理,并返回处理后的optional, * 否则返回option.empty(); */ public static void test7() { Optional<Employee> op = Optional.ofNullable(new Employee("张三",18,888.88,Status.FREE)); Optional<String> res = op.map((e)->e.getName()); System.out.println(res.get()); }
/** * 与map类似,要求返回值必须是Optional; */ public static void test8() { Optional<Employee> op = Optional.ofNullable(new Employee("张三",18,888.88,Status.FREE)); Optional<String> res = op.flatMap((e)->Optional.of(e.getName())); System.out.println(res.get()); } } |
2、运行效果
自己回去慢慢试着运行吧;
好了,到这里基本上java8里面常用的部分就已经全部讲完了,接下来我们看进阶部分;