JAva 8におけるOptionalの使い方の詳細
7529 ワード
package com.lyzx.concurrent.java8;
import org.junit.Test;
import java.util.Optional;
import java.util.Random;
public class OptionalTest {
/**
* Optional.of(T t) Optional
* >> T value, t null value
* isPresent()
* >> return value != null
* get() T t
* >> value != null value,
* Optional.empty() Optional
*
*/
@Test
public void test1(){
Optional op1 = Optional.of(new Java8("first"));
System.out.println(op1.get()+" "+op1.isPresent());
Optional op2 = Optional.empty();
System.out.println(op2.isPresent()+" "+ op2.get());
}
/**
* Optional.ofNullable(T t)
* >> return value == null ? empty() : of(value)
*
*/
@Test
public void test2(){
// Optional op1 = Optional.ofNullable(new Java8(" "));
Java8 j = null;
Optional op1 = Optional.ofNullable(j);
System.out.println(op1.isPresent()+" "+op1.isPresent());
System.out.println(op1.orElse(new Java8(" ")));
}
/**
* orElseGet(fun) isPresent()==false T t
*/
@Test
public void test3(){
Java8 j = null;//new Java8("AA");//null;
Optional op1 = Optional.ofNullable(j);
Java8 j2 = op1.orElseGet(()->{
String[] arr = {" "," "," "};
Random rand = new Random();
return new Java8(arr[rand.nextInt(arr.length)]);
});
System.out.println(j2);
}
@Test
public void test4(){
Man man = new Man(" ",new TargetPhone("P20 Pro"));
String phoneName = TralditionalMethod(man);
System.out.println(phoneName);
System.out.println(TralditionalMethod(null));
}
/**
*
* null
* @param man
* @return
*/
public String TralditionalMethod(Man man){
if(null != man){
TargetPhone phone = man.getPhone();
if(null != phone){
String phoneName = phone.getPhoneName();
return phoneName;
}
}
return " Mix2S";
}
@Test
public void test5(){
// XMan xman = new XMan(" ",Optional.of(new TargetPhone(" T3")));
// Optional op = Optional.ofNullable(xman);
Optional op = Optional.empty();
System.out.println(newMethod(op));
}
/**
* ,
* , null Optional
* @param man
* @return
*/
public String newMethod(Optional man){
return man.orElse(new XMan(" ",Optional.of(new TargetPhone(" Mix2S"))))
.getPhone()
.get()
.getPhoneName();
}
/**
* ifPresent
* op ,
*/
@Test
public void test6(){
String data = null;//"1,2,3";
Optional op = Optional.ofNullable(data);
op.ifPresent(x->{
for(String v : x.split(",")){
System.out.println("--"+v);
}
});
if(op.isPresent())
System.out.println(op.get());
}
/**
* orElse() orElseGet() op get() ,
*
* orElse() op ,
* orElseGet() get()
*
* orElseThrow() op
*/
@Test
public void test7(){
String data = null;
// String data = "youzhi";
Optional op = Optional.ofNullable(data);
String other = op.orElse(getStr());
System.out.println("1:"+other);
System.out.println("===================");
String elseGet = op.orElseGet(()->getStr());
System.out.println("2:"+elseGet);
op.orElseThrow(()->new IllegalArgumentException(" "));
}
public String getStr(){
System.out.println("getStr() ......");
return "getStrValue";
}
/**
* map() flatMap()
*/
@Test
public void test8(){
Man man = new Man(" ",new TargetPhone("iphoneX"));
// Man man = null;
Optional op = Optional.ofNullable(man);
String ss = op.map(x -> x.getManName()).orElseGet(() -> " ");
System.out.println(ss);
TargetPhone t3 = op.map(x -> x.getPhone()).orElseGet(() -> new TargetPhone("T3"));
System.out.println(t3.getPhoneName());
}
/**
* Optional
*
*/
@Test
public void test9(){
// Man man = new Man(" ",new TargetPhone("iphoneX"));
Man man = null;
Optional op = Optional.ofNullable(man);
String iphoneName = op.map(x->x.getPhone())
.map(x->x.getPhoneName())
.orElse(" ");
System.out.println(iphoneName);
}
/**
* filter
*/
@Test
public void test10(){
Man man = new Man(" ",new TargetPhone("iphoneX"));
Optional op = Optional.ofNullable(man);
Optional phone = op.map(x -> x.getPhone())
.filter(x -> x.getPhoneName().length() > 5);
System.out.println(phone.orElse(new TargetPhone(" ")).getPhoneName());
}
}
class Java8{
private String name;
public Java8(String name){
this.name = name;
}
@Override
public String toString() {
return "Java8{" +
"name='" + name + '\'' +
'}';
}
}
class Man{
private String manName;
private TargetPhone phone;
public Man(String manName,TargetPhone phone){
this.manName=manName;
this.phone = phone;
}
public String getManName() {
return manName;
}
public TargetPhone getPhone() {
return phone;
}
@Override
public String toString() {
return "Man{" +
"manName='" + manName + '\'' +
", phone=" + phone +
'}';
}
}
class TargetPhone{
private String phoneName;
public TargetPhone(String phoneName){
this.phoneName = phoneName;
}
public String getPhoneName(){
return phoneName;
}
}
class XMan{
private String manName;
private Optional phone;
public XMan(String manName,Optional phone){
this.manName = manName;
this.phone = phone;
}
public String getManName() {
return manName;
}
public Optional getPhone() {
return phone;
}
@Override
public String toString() {
return "XMan{" +
"manName='" + manName + '\'' +
", phone=" + phone +
'}';
}
}