java8学习(六)Optional类

这个Optional类主要是解决空指针的问题

1.以前对null 的处理,获取用户名称

public static void main(String[] args) {
        UserDto userDto1=new UserDto(1l,null);
        UserDto userDto2=new UserDto(2l,"张三");
        String name = getName(userDto2);
        System.out.println(name);
    }

    /**
     * 以前的获取用户名称
     * @param userDto
     * @return
     */
    private static String getName(UserDto userDto){
        if(userDto!=null){
            return userDto.getUserName();
        }
        return "userDto为null";
    }

2.创建一个Optional

    private static void creatOptional(){
      Optional<String> o1 = Optional.of("张");
      //Optional.of不能使用null
//        Optional<Object> o = Optional.of(null);
      //Optional.ofNullable支持 null
      Optional<String> o3 = Optional.ofNullable("张");
      Optional<Object> o = Optional.ofNullable(null);
      //创建一个空的Optional
      Optional<Object> o2 = Optional.empty();
  }

3.OptionalOptional的常用方法

       public static void main(String[] args) {
     Optional<String> op1 = Optional.of("张三");
     Optional<String> op2 = Optional.empty();
     //isPresent():判断是否包含值,包含值返回true,不包含值返回false
     if(op1.isPresent()){
         // get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常
         String s1 = op1.get();
         System.out.println("用户名称:" +s1);
     }
     if(op2.isPresent()){
         System.out.println(op2.get());
     }else{
         System.out.println("op2是一个空Optional对象");
     }
     //orElse(T t):如果调用对象包含值,就返回该值,否则返回t
     String s3 = op1.orElse("李四");
     System.out.println(s3);
     String s4 = op2.orElse("王五");
     System.out.println(s4);
     //orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返 回值
     String s5 = op2.orElseGet(()->{ return "Hello"; });
     System.out.println(s5);
     //ifPresent(Consumer consumer):如果存在值,就xxx
     op1.ifPresent(s -> System.out.println("当前对象存在值:"+s+"---"));
 }

控制台输出:

用户名称:张三
op2是一个空Optional对象
张三
王五
Hello
当前对象存在值:张三—

4.Optional对null 的处理,获取用户名称

   public static void main(String[] args) {
       UserDto userDto=new UserDto(null,null);
       UserDto userDto1=new UserDto(1l,null);
       UserDto userDto2=new UserDto(2l,"张三");
       String userName = getUserName(userDto);
       String userName1 = getUserName(userDto1);
       String userName2 = getUserName(userDto2);
       System.out.println("userName:"+userName +"   userName1:"+userName1+"    userName2:"+userName2);
   }

  private static String getUserName(UserDto userDto){
       Optional<UserDto> op=Optional.of(userDto);
       return op.orElse(null).getUserName();
//        if(op.isPresent()){
//            return op.get().getUserName();
//        }
//        return null;
   }

控制台输出:

userName:null userName1:null userName2:张三

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值