Optional是JDK8中提供用于包含未知对象的工具类,即可以利用Optional包装对象来避免繁琐的空指针检查,以及NullPointException的处理,在Optional中,用value代表所包裹的对象。
方法名称 | 返回类型 | 参数 | 功能 |
---|---|---|---|
static empty | Optional |
无 | 生成一个空的Optional对象 |
static of | Optional | T value | 返回一个包裹给定对象的Optional对象 |
static ofNullable | Optional | T value | 若参数对象不为null,这返回包裹该参数对象的Optional对象,否则返回一个空的Optional对象 |
equals | boolean | Object | 仅当参数类型为Optional 且 参数中的Optional包裹的值与参数中的值相等时返回为true其余都返回false |
filtrer | Optional |
Predicate<? super T > predicate | 过滤器,过滤出满足predicate函数中定义的判断条件的value,并将此value用Optional包裹起来,若value都不满足,这返回一个空的Optional对象 |
flatMap | Optional | Function<? super T,Optional> mapper | 根据提供的映射函数,将Optional中的value值应用与mapper方法,并将返回结果包装为一个Optional对象,若mapper返回结果为null,这返回一个空的Optional对象 |
get | T | 无 | 返回Optional中的value,若Optional为空,则抛出NoSuchElementException |
hsahCode | int | 无 | 返回value的hashCode值,若value为null,则返回0 |
ifPresent | void | Consumer<? super T> consumer | 若Optional中value不为空,则让value执行参数提供的consumer函数,否则不采取任何行动 |
ifPresentOrElse | void | Consumer<? super T> consumer, Runnable emptyAcrion | 若Optional中value不为空,则让value执行参数提供的consumer函数,否则执行参数提供的emptyAction中的run方法 |
isPresent | boolean | 无 | 判断Optional中value是否为空,为空则返回false |
map | Optional | Function<? super T, extends U> mapper | 若Optional中value不为空,则将value应用与提供的mapper方法,并且若返回结果不为空,则返回包裹该结果的Optional对象 |
orElse | T | T other | 若Optional中的value不为空,则返回该value,否则返回参数提供的other |
orElseGet | T | Supplier<? extend T > other | 若Optional中的value不为空,则返回value,否则返回函数other的执行结果 |
orElseThrow | Supplier<? extends X> exceptionSupplier | 若Optional中的value为空,则执行参数提供的函数,并抛出参数函数中指定的异常信息 |
Person p1 = null;
Optional<Person> pop2 = Optional.ofNullable(p1);
pop2.ifPresent(person -> {System.out.println(person);});
pop2.ifPresentOrElse(person -> {System.out.println(person);},() ->{System.out.println("the value is empty!");});
Person person1 = new Person("kaithy",23);
Person person2 = new Person("lucy",24);
Person person3 = new Person("lili",25);
List<Person> persons = new ArrayList<>();
persons.add(person1);
persons.add(person2);
persons.add(person3);
Optional<List<Person>> optional = Optional.ofNullable(persons);
Optional<List<Person>> fop = optional.filter(people -> {return people.contains(person1);});
//判断是否为同一个对象,结果显示为true
System.out.println(fop == optional);
System.out.println(fop.equals(optional));
Person person1 = new Person("kaithy",23);
Person person2 = new Person("lucy",24);
Optional<Person> optional = Optional.ofNullable(person1);
Optional<Person> mapOp = optional.map(person -> {
return null;
});
System.out.println(mapOp.isPresent());
Optional<Person> mapOp2 = optional.map(person -> {return null;});
System.out.println(mapOp == mapOp2);
Optional<Person> mapOp3 = optional.map(person -> {return person;});
//mapper返回值相同,判断是否是同一个Optional对象
System.out.println(optional == mapOp3);
//会抛出NullPointException
Optional<Person> flatMapOp = optional.flatMap(person -> {
return null;
});
Person person1 = new Person("kaithy",23);
Person person2 = new Person("lucy",24);
Optional<Person> optional = Optional.ofNullable(person1);
Optional<Person> mapOp = optional.map(person -> {
return null;
});
mapOp = mapOp.or(()->{
return Optional.ofNullable(person2);
});
System.out.println(mapOp.isPresent());
Person person1 = new Person("kaithy",23);
Person person2 = new Person("lucy",24);
Optional<Person> optional = Optional.ofNullable(person1);
Optional<Person> mapOp = optional.map(person -> {
return null;
});
Person p1 = mapOp.orElse(person2);
System.out.println(p1);
Person p2 = mapOp.orElseGet(() ->{
return new Person("laila",25);
});
System.out.println(p2);
try {
Person p3 = mapOp.orElseThrow(() ->{
return new RuntimeException("empty value");
});
System.out.println(p3);
}catch (RuntimeException e) {
System.out.println(e.getMessage());
}
上文转载自自己的个人博客,主要记录自己的成长经历,用输出倒逼自己努力学习。链接地址:https://kaithyrookie.github.io/2018/10/20/Java-Optional%E4%BD%BF%E7%94%A8/
原文:https://www.cnblogs.com/Kaithy-Rookie/p/11708237.html