欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
}

路漫漫其修远兮,吾将上下而求索,希望此篇文章对大家有所帮助......

相关标签: Java java jdk1.8