- https://www.jianshu.com/p/94c69d2ef00f
- Optional类
是一个容器可以存放非空或是空的对象,可以判断出对象是否为空,
主要是判断是否为null,可以类似于if-else等操作,
但是不是要取代if-else
package com.bjsxt.servier1.controller;
import com.sun.media.sound.SoftTuning;
import java.sql.SQLOutput;
import java.util.Optional;
public class Style {
public static void main(String[] args) {
/** Optional类 是一个容器里面可以存放对象,可以存放为null的对象
* Optional.of(obj) 传入一个非空的对象
* Optional.ofNullable(obj) 允许传入一个空对象
* isPresetn() 是一个判断空的方法 如果这个类被创建了或是这个属性有值则返回true
* get() 取对象
*
* */
Integer a = null;
Integer b = 1;
String obj = new String("rudy");
String nulls = "";
Test test = new Test();
Son son = new Son();
son.setName("rudy");
String name = son.getName();
Optional<Object> obj1 = Optional.ofNullable(a);
if(obj1.isPresent()){
System.out.println("存在");
}else{
System.out.println("不存在");
}
Optional<Integer> b1 = Optional.ofNullable(b);
/** orElse(T t) 传入一个默认值来作为否则之后的内容
* 如果Optional容器中有值怎输出,没有值则输出默认值就是orElse()中的值
* */
System.out.println(obj1.orElse(2));
System.out.println(b1.orElse(3));
/** orElseGet() 这个方法是如果Optional容器中对象为空时不再是返回默认值
* 而是返回一个方法
* */
Integer c = null;
Optional<Object> optional = Optional.ofNullable(c);
Object o = optional.orElseGet(() -> son.getName());
Object r = optional.orElseGet(() -> {
System.out.println("空的");
return "傻逼";
});
System.out.println(o);
System.out.println(r);
System.out.println("================");
/** ifPresetn() :Optional中所存的对象中不为空时会执行指定代码
* */
Integer d = null;
Integer e = 2;
Optional<Integer> d1 = Optional.ofNullable(d);
Optional<Object> e1 = Optional.ofNullable(e);
d1.ifPresent(p-> System.out.println("不为空1"));
e1.ifPresent(p-> System.out.println("不为空2"));
/** 小练习 map方法相当于是 if(!=null){} 包含了isPresent 是否存在
* orElse()方法就是else{}
*/
Optional<Integer> e2 = Optional.ofNullable(d);
String s = e2.map(y -> {
System.out.println("有有有");
return "不为空";
}).orElse("没有啊");
System.out.println(s);
Integer f = 1;
System.out.println(f+f);
Optional<Integer> f1 = Optional.ofNullable(f);
Object rudy = f1.map(v -> v + v).map(v -> v + v).map(v -> {
System.out.println(v);
return null;
}).orElse("rudy");
System.out.println(rudy);
}
}
package com.bjsxt.servier1.controller;
import com.sun.media.sound.SoftTuning;
import java.sql.SQLOutput;
import java.util.Optional;
public class Style {
public static void main(String[] args) throws Throwable {
Integer a =1;
Integer b =null;
Optional<Integer> a1 = Optional.ofNullable(a);
//两个对象是否相等
System.out.println(a1.equals(1));
System.out.println(a1.equals(b));
System.out.println(a1.isPresent());
Integer rudy = a1.orElse(666);
Optional<Integer> b1 = Optional.ofNullable(b);
//判断对象是否为空 如果不为空返回该对象,否则返回该方法的指定值
System.out.println(b1.orElse(666));
//如果该对象不为空就返回该对象,为空则返回该方法指定的方法值
Integer 没有值啊 = b1.orElseGet(() -> {
System.out.println("没有值啊");
return 777;
});
System.out.println(没有值啊);
//如果对象为空 这个方法会抛出一个异常对象,
/* b1.orElseThrow(()->{
System.out.println("抛出一个异常");
return new Throwable("异常");
});*/
//
//filter是筛选添加一个条件 满足后执行指定 否则执行orElse
Integer integer = a1.filter(v -> v > 1).orElse(666);
System.out.println(integer);
//map主要是判断是否null 然后进行操作
Integer integer1 = a1.map(o -> o + o).orElse(999);
System.out.println(integer1);
}
}