最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Optional
Optional
这个Optional类注意是解决空指针的问题
1. 以前对null 的处理
@Testpublicvoidtest01(){//String userName = "张三";String userName=null;if(userName!=null){System.out.println("字符串的长度:"+ userName.length());}else{System.out.println("字符串为空");}}
2. Optional类
Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointerException,
3. Optional的基本使用
Optional对象的创建方式
/**
* Optional对象的创建方式
*/@Testpublicvoidtest02(){// 第一种方式 通过of方法 of方法是不支持null的Optional<String> op1=Optional.of("zhangsan");//Optional<Object> op2 = Optional.of(null);// 第二种方式通过 ofNullable方法 支持nullOptional<String> op3=Optional.ofNullable("lisi");Optional<Object> op4=Optional.ofNullable(null);// 第三种方式 通过empty方法直接创建一个空的Optional对象Optional<Object> op5=Optional.empty();}
4. Optional的常用方法
/**
* Optional中的常用方法介绍
* get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常
* get()通常和isPresent方法一块使用
* isPresent():判断是否包含值,包含值返回true,不包含值返回false
* orElse(T t):如果调用对象包含值,就返回该值,否则返回t
* orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返回值
*/@Testpublicvoidtest03(){Optional<String> op1=Optional.of("zhangsan");Optional<String> op2=Optional.empty();// 获取Optional中的值if(op1.isPresent()){String s1= op1.get();System.out.println("用户名称:"+s1);}if(op2.isPresent()){System.out.println(op2.get());}else{System.out.println("op2是一个空Optional对象");}String s3= op1.orElse("李四");System.out.println(s3);String s4= op2.orElse("王五");System.out.println(s4);String s5= op2.orElseGet(()->{return"Hello";});System.out.println(s5);}
@Testpublicvoidtest04(){Optional<String> op1=Optional.of("zhangsan");Optional<String> op2=Optional.empty();// 如果存在值 就做什么
op1.ifPresent(s->System.out.println("有值:"+s));
op1.ifPresent(System.out::println);}/**
* 自定义一个方法,将Person对象中的 name 转换为大写 并返回
*/@Testpublicvoidtest05(){Person p=newPerson("zhangsan",18);Optional<Person> op=Optional.of(p);String name=getNameForOptional(op);System.out.println("name="+name);}/**
* 根据Person对象 将name转换为大写并返回
* 通过Optional方式实现
* @param op
* @return
*/publicStringgetNameForOptional(Optional<Person> op){if(op.isPresent()){String msg=//op.map(p -> p.getName())
op.map(Person::getName)//.map(p -> p.toUpperCase()).map(String::toUpperCase).orElse("空值");return msg;}returnnull;}/**
* 根据Person对象 将name转换为大写并返回
* @param person
* @return
*/publicStringgetName(Person person){if(person!=null){String name= person.getName();if(name!=null){return name.toUpperCase();}else{returnnull;}}else{returnnull;}}
~好了,Optional真的很简单,其实大家只要了解了它在工作中还是蛮有用的哦,欢迎点赞关注加收藏哦