JDK8新特性(十三)之Optional

1.Optional类介绍

Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象。它的作用主要是为了解决避免Null检查,防止NullPointerException。

2.Optional类的创建方式

import java.util.Optional;

public class Demo {

    public static void main(String[] args){
        //of:只能传入一个具体值,不能传入null
        //ofNullable:既可以传入具体值
        //empty:存入的是null
        //Optional<String> op1=Optional.of("王初冬");
        //Optional<String> op1=Optional.of(null);
        //Optional<String> op2=Optional.ofNullable("王初冬");
        //Optional<String> op2=Optional.ofNullable(null);
        Optional<Object> op3=Optional.empty();
    }
}

3.Optional类的isPresent方法

import java.util.Optional;

public class Demo {

    public static void main(String[] args){
        Optional<String> op1=Optional.of("王初冬");
        //判断Optional中是否有具体值,有值则返回true,没有值则返回false
        boolean present = op1.isPresent();
        System.out.println("present = "+present);
    }
}

执行上述代码,其输出结果为:

present = true

4.Optional类的get方法

import java.util.Optional;

public class Demo {

    public static void main(String[] args){
        Optional<String> op1=Optional.of("王初冬");
        //获取Optional中的值,如果有值则返回具体值,没有值则报错
        System.out.println(op1.get());
    }
}

5.Optional中的orElse方法

orElse:如果Optional中有值,就取出这个值;如果没有值,就使用参数指定的值

import java.util.Optional;

public class Demo {

    public static void main(String[] args){
        Optional<String> userName=Optional.of("南宫仆射");
        String name =userName.orElse("王初冬");
        System.out.println("name="+name);
    }
}

6.Optional中的ifPresent方法

ifPresent:如果Optional存在值的话,则调用Lambda表达式

import java.util.Optional;

public class Demo {

    public static void main(String[] args){
        Optional<String> userName=Optional.of("王初冬");
        userName.ifPresent(s ->{
            System.out.println("有人:"+s);
        });
    }
}

7.Optional中的map方法

public class Demo {

    public static void main(String[] args){
        User u = new User("王初冬",18);
        String upperUserName = getUpperUserName(u);
        System.out.println(upperUserName);
    }

    // 定义一个方法将User中的用户名转成大小并返回
    public static String getUpperUserName(User u){
        if(u!=null){
            String userName = u.getUserName();
            if(userName!=null){
                return userName.toUpperCase();
            }else {
                return null;
            }
        }else{
            return null;
        }
    }
}

上述为传统方式来事项,如果采用Optional,其修改为如下:

import java.util.Optional;

public class Demo {

    public static void main(String[] args){
        User u = new User("王初冬",18);
        Optional<User> op=Optional.of(u);
        System.out.println(getUpperUserName(op));
    }

    public static String getUpperUserName(Optional<User> op){
        //String upperUserName=op.map(u->u.getUserName())
        //        .map(s-> s.toUpperCase())
        //        .orElse("null");
        String upperUserName=op.map(User::getUserName).map(String::toUpperCase).orElse("null");
        return upperUserName;
    }
}

总结:Optional是一个可以为null的容器对象,orElse、ifPresent、map等方法避免对null的判断,写出更加优雅的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值