Optional是JDK8的新特性,虽然出现很久了,但是一直没有很好的运用它,今天特意研究了一下,把一些常用的用法记下来,防止忘记了
1 构建空Optional的三种方法
第一种构建空Optional对象
在get的时候就会报错
第二种构建空Optional对象
在get的时候也会报错
第三种构建空Optional对象
在get的时候依然报错
可见三种构建空Optional的方法直接get的时候就会报错,这样在get拿数据的时候就报错避免了空值传递导致其他引用的地方也会出现空指针的风险
2 Optioanal的使用场景
@Test
public void testOptional4(){
Optional<Object> t3 = Optional.ofNullable(null);
boolean present = t3.isPresent();
}
isPresent
方法在Optional中有值返回true,没有值返回false
@Test
public void testOptional5(){
Optional<String> t3 = Optional.ofNullable("aaa");
t3.ifPresent(t-> System.out.println("bbbbb"));
}
ifPresent
方法在t3有值的时候就会执行后面的表达式,所以此方法会输出bbbb
@Test
public void testOptional6(){
Optional<String> t3 = Optional.ofNullable(null);
String orElse = t3.orElse("默认值");
System.out.println(orElse);
}
orElse
方法当t3中是空的时候就会输出传入的值:“默认值”,所以此方法输出"默认值"
@Test
public void testOptional7(){
Optional<String> t3 = Optional.ofNullable(null);
t3.orElseThrow(() ->new RuntimeException("222"));
}
orElseThrow
方法在t3中是空的时候回直接一个异常,所以此方法会出现异常:java.lang.RuntimeException: 222
@Test
public void testOptional8(){
Optional<String> t3 = Optional.ofNullable("a");
String c = t3.map(t -> t + "b").orElse("c");
System.out.println(c);
}
map方法可以对参数进行操作后再返回一个Optional对象,所以后面要再加一个orElse,所以此方法输出:ab
以上为JDK8中的方法
JDK9中还填加了ifPresentOrElse、or、stream方法
3 下面对lambda表达式分类记一下
consumer
: 消费者 没有返回值
supplier
: 提供者 需要返回值
runnable
:既无输入又无输出
function
:可以有输入也有输出
predicate
:返回的是boolean值
https://www.jb51.net/article/186426.htm
https://mp.weixin.qq.com/s/NlM233GA4JYzFzfsxDfZcg