JDK8新特性之Optional类
程序员文章站
2022-01-15 12:00:22
...
Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象。它的作用主要是为了解决避免null检查,防止NullPointerException.
1、Optional类的创建方式
Optional.of(T t):创建一个Optional实例
Optional.empty():创建一个空的Optional实例
Optional.ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例
2、Optional类的常用方法
isPresent():判断是否包含值,包含值返回true,不包含值返回false
get():如果Optional有值则将其返回,否则抛出NOSuchElementException
orElse(T t):如果调用对象包含值,返回该值,否则返回参数t
orElseGet(supplier s):如果调用对象包含值,返回该值,否则返回s获取的值
map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
3、使用Optional类操作
//以前对null的处理方式
@Test
public void test(){
String userName = "凤姐";
if(userName != null){
System.out.println("用户名为 : "+userName);
}else {
System.out.println("用户名不存在");
}
}
@Test
public void testOption(){
Optional<String> op = Optional.of("白兰");
boolean present = op.isPresent();
System.out.println("present : "+present);//true
Optional<Object> empty = Optional.empty();
System.out.println("empty : "+empty.isPresent());//false
System.out.println("有值返回 : "+op.get());
//System.out.println("无值抛异常 :"+empty.get());
}
@Test
public void testOp(){
Optional<String> optionals = Optional.of("凤姐");
Optional<Object> empty = Optional.empty();
//存在做的什么
// optionals.ifPresent(s->System.out.println("用户名为 : "+s));
//存在做的什么,不存在做点什么 没有ifPresentOrElse方法
//optionals.ifPresentOrElse(s->System.out.println("用户名为 : "+s),()->System.out.println("用户名不存在"));
System.out.println("用户名为 : "+optionals.orElse("null"));
System.out.println("用户名为 :"+empty.orElse("null"));
Optional<String> userNameO = Optional.of("凤姐");
// Optional<String> userNameO = Optional.empty();
// 存在做的什么
// userNameO.ifPresent(s -> System.out.println("用户名为" + s));
// 存在做的什么,不存在做点什么
String s = userNameO.orElseGet(() -> "未知姓名 :");
System.out.println("s : "+s);
System.out.println(" :"+empty.orElseGet(()->"未知姓名"));
}
//对对象的姓名做字母转大写,否则返回null
@Test
public void testMap(){
Person person = new Person(null,54,"男");
Optional<Person> optionalPerson = Optional.of(person);
String aNull = optionalPerson.map(p -> p.getName()).map(name -> name.toUpperCase()).orElse("空的值");
System.out.println("姓名的值为 : "+aNull);
}
路漫漫其修远兮,吾将上下而求索,希望此篇文章对大家有所帮助......
上一篇: JavaScript时间线
下一篇: pgsql 时间线