Optional容器作用:在开发过程中经常存在if(a == null){} 这种判断,若不进行判断就会出现空指针异常的情况,java8的Optional容器出现,是我们不在需要判断是否为空,提高代码简洁,最大化减少空指针的出现。
一、 Optional的方法详解
方法 | 描述 |
---|---|
of | 把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException |
empty | 创建一个空的Optional对象 |
ofNullable | 如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException |
get | 把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException |
orElse | 如果创建的Optional中有值存在,则返回此值,否则返回一个默认值 |
orElseGet | 如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值 |
orElseThrow | 如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常 |
filter | 如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象 |
map | 如果创建的Optional中的值存在,对该值执行提供的Function函数调用 |
flagMap | 如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象 |
isPresent | 如果创建的Optional中的值存在,返回true,否则返回false |
ifPresent | 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做 |
- of()
//不为空时 正常输出
Optional<String> optional = Optional.of("小张");
System.out.println(optional.get());
//为空时抛出异常
Optional<String> nullOptional = Optional.of(null);
System.out.println(nullOptional.get());
- empty():获取一个空的Optional对象
Optional optional1 = Optional.empty();
System.out.println(optional1);
- ofNullable(): 如果有值则返回值 没有值则返回 Optional.empty,创建时不会报错不会抛出空指针,如果在使用.get()就会抛出空指针,
System.out.println(Optional.ofNullable(null));
System.out.println(Optional.ofNullable("list").get());
- get() 如果我们创建的Optional对象中有值存在则返回此值,如果没有值存在,则会抛出
NoSuchElementException异常
Optional<String> optional = Optional.of("小张");
System.out.println(optional.get());
- orElse()如果值不为空则返回值,若返回一个默认值
Optional<String> optional2 = Optional.empty();
System.out.println(optional2.orElse("1"));
- orElseGet() 如果值不为空则返回值,如果值为空 这返回一个自定义一个Supplier接口lam值
System.out.println(optional2.orElseGet(() -> String.valueOf(Math.random())));
- orElseThrow() 如果不为空则返回值,为空则返回一个lam格式的异常
System.out.println(optional2.orElseThrow(CustomException::new));
System.out.println(optional2.orElseThrow(NullPointerException::new));
public class CustomException extends RuntimeException{
public CustomException() {
super("需要自定义异常");
}
public CustomException(String message) {
super(message);
}
}
- filter():如果创建的Optional中的值满足条件则返回值,不满足则返回一个 Optional.empty
System.out.println(optional.filter((x) -> x.equals("张")));
- map() 判断值是否符合lam条件,如果不符合则返回false 如果符合则返回true 传入断言型lam接口:Function
System.out.println(optional.map((x) -> x.equals("小张")));
- flagMap() 判断值是否为空,如果为空则返回 Optional.empty,不为空则执行并返回自定义lam,返回的值会被封装成Optional对象
System.out.println(optional.flatMap(e -> Optional.of(e)));
- isPresent() 判断Optional对象的值是否为空 返回true和false
System.out.println(optional.isPresent());
- ifPresent() 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做,参数为 Consumer (传入一个参数 无返回值)
optional.ifPresent((x) -> System.out.println("执行一些东西"));