當ofNullable包含的對象值不存在時候,orElse都會走自己包含的方法,orElseGet則會智能判斷。
/**
* orElse執行----
* orElseGet執行----
* ycw---------ycw
*/
@Test
public void myOPtions1(){
Map<String,String> obj = null;
String name1 = Optional.ofNullable(obj).map(x -> x.get("name")).orElse(get("orElse"));
String name2 = Optional.ofNullable(obj).map(x -> x.get("name")).orElseGet(()->get("orElseGet"));
System.out.println(name1+"---------"+name2);
}
/**
* orElse執行----
* wk---------wk
* 總結:當ofNullable包含的對象值不存在時候,orElse都會走自己包含的方法,orElseGet則會智能判斷。
*/
@Test
public void myOPtions2(){
Map<String,String> obj = new HashMap<String,String>(){{
put("name","wk");
}};
String name1 = Optional.ofNullable(obj).map(x -> x.get("name")).orElse(get("orElse"));
String name2 = Optional.ofNullable(obj).map(x -> x.get("name")).orElseGet(()->get("orElseGet"));
System.out.println(name1+"---------"+name2);
}
@Test
public void myOPtions3() throws DemoException {
Map<String,String> obj = null;
String name1 = Optional.ofNullable(obj).map(x -> x.get("name")).orElse(get("orElse"));
String name2 = Optional.ofNullable(obj).map(x -> x.get("name")).orElseGet(()->get("orElseGet"));
String name3 = Optional.ofNullable(obj).map(x -> x.get("name")).orElseThrow(()->new DemoException("我是一個錯誤"));
System.out.println(name1+"---------"+name2+"----------"+name3);
}
private String get(String arg) {
System.out.println(arg+"執行----");
return "ycw";
}
class DemoException extends Throwable {
public DemoException(String msg) {
super(msg);
}
}