package cn.wcj.jdk8.lambda.test;
public class Godness {
private String name;
public Godness() {
}
public Godness(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Godness [name=" + name + "]";
}
}
package cn.wcj.jdk8.lambda.test;
public class Man {
private Godness god;
public Man() {
}
public Man(Godness god) {
this.god = god;
}
public Godness getGod() {
return god;
}
public void setGod(Godness god) {
this.god = god;
}
@Override
public String toString() {
return "Man [god=" + god + "]";
}
}
package cn.wcj.jdk8.lambda.test;
import java.util.Optional;
//注意:Optional 不能被序列化,分布式開發不用
public class NewMan {
private Optional<Godness> godness = Optional.empty();
private Godness god;
public Optional<Godness> getGod(){
return Optional.of(god);
}
public NewMan() {
}
public NewMan(Optional<Godness> godness) {
this.godness = godness;
}
public Optional<Godness> getGodness() {
return godness;
}
public void setGodness(Optional<Godness> godness) {
this.godness = godness;
}
@Override
public String toString() {
return "NewMan [godness=" + godness + "]";
}
}
package cn.wcj.jdk8.lambda.test;
import static org.junit.Assert.*;
import java.security.cert.PKIXRevocationChecker.Option;
import java.util.Optional;
import org.junit.Test;
import cn.wcj.jdk8.lambda.test.Emp.Status;
/*
* 一、Optional 容器類:用于盡量避免空指針異常
* Optional.of(T t) : 建立一個 Optional 執行個體
* Optional.empty() : 建立一個空的 Optional 執行個體
* Optional.ofNullable(T t):若 t 不為 null,建立 Optional 執行個體,否則建立空執行個體
* isPresent() : 判斷是否包含值
* orElse(T t) : 如果調用對象包含值,傳回該值,否則傳回t
* orElseGet(Supplier s) :如果調用對象包含值,傳回該值,否則傳回 s 擷取的值
* map(Function f): 如果有值對其處理,并傳回處理後的Optional,否則傳回 Optional.empty()
* flatMap(Function mapper):與 map 類似,要求傳回值必須是Optional
*/
public class OptionalTest {
@Test
public void test1() {
Optional<Emp> optional = Optional.of( new Emp("3333", "張三", , ,Status.BUSY)) ;
// Optional<Emp> optional = Optional.of(null) ;
Emp emp = optional.get() ;
System.out.println(emp) ;
}
@Test
public void test2(){
// Optional<Object> optional = Optional.ofNullable(null) ;
// System.out.println(optional) ;
Optional<Object> optional2 = Optional.empty() ;
System.out.println(optional2) ;
}
@Test
public void test3(){
//Optional<Emp> optional = Optional.ofNullable( new Emp("3333", "張三", , ,Status.BUSY)) ;
Optional<Emp> optional = Optional.ofNullable(null) ;
if(optional.isPresent())
System.out.println(optional.get());
else
System.out.println(new Emp());
}
@Test
public void test4(){
Optional<Emp> optional = Optional.ofNullable(new Emp("4444", "李四", , ,Status.FREE)) ;
Emp emp = optional.orElse(new Emp("3333", "張三", , ,Status.BUSY)) ;
System.out.println(emp);
}
@Test
public void test5(){
Optional<Emp> optional = Optional.ofNullable(new Emp("4444", "李四", , ,Status.FREE)) ;
Emp emp = optional.orElseGet(Emp::new) ;
System.out.println(emp);
}
@Test
public void test6(){
Optional<Emp> optional = Optional.ofNullable(new Emp("4444", "李四", , ,Status.FREE)) ;
Optional<Emp> map = optional.map((e)->{
e.setEname("李四四") ;
return e ;
});
System.out.println(map.isPresent());
}
@Test
public void test7(){
Optional<Emp> optional = Optional.ofNullable(new Emp("4444", "李四", , ,Status.FREE)) ;
Optional<Emp> map = optional.flatMap(e->{
e.setEname("李八蛋") ;
return Optional.of(e);
}) ;
System.out.println(map.get());
}
//需求:擷取一個男人心中女神的名字
public String getGodnessName(Man man){
if(man!=null)
if(man.getGod()!=null)
return man.getGod().getName() ;
return "Teacher-Cang" ;
}
//需求[Optional容器闆]:擷取一個男人心中女神的名字
public String getGodnessName(Optional<NewMan> man){
return man.orElse(new NewMan())
.getGodness()
.orElse(new Godness("Teacher-BoDuo"))
.getName() ;
}
@Test
public void test8(){
Godness god=new Godness("Teacher-LongZe");
//Man man=new Man() ;
Man man=new Man(god);
String name = getGodnessName(man);
System.out.println(name);
}
@Test
public void test9(){
//String name = getGodnessName(Optional.empty());
//String name = getGodnessName(Optional.of(new NewMan()));
Godness godness=new Godness("Teacher-XiaoZeMaLiYa") ;
NewMan man=new NewMan(Optional.ofNullable(godness)) ;
String name = getGodnessName(Optional.of(man));
System.out.println(name);
}
}