java8中的Optional的使用

import java.util.Optional;

public class TestOptional {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
//        testDemo.setCount(2);
        //表示的是如果不给count赋予初始值的时候,那么就会是1,否则就是赋予的初始值。
        int count3 = Optional.ofNullable(testDemo).map(item -> item.getCount()).orElse(1);
        System.out.println("count3:"+count3);
    }
}

  

运行结果:

count3:2(如果给count赋予初始值的时候),

count3:1(如果不给count赋予初始值的时候)

import java.util.Optional;

public class TestOptional {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
//        testDemo.setCount(2);
        //表示的是如果不给count赋予初始值的时候,那么就会是1,否则就是赋予的初始值。
        int count3 = Optional.ofNullable(testDemo).map(item -> item.getCount()).orElseThrow(()->new RuntimeException("count没有赋予初始值"));
        System.out.println("count3:"+count3);
    }
}

  

运行结果:

Exception in thread "main" java.lang.RuntimeException: count没有赋予初始值
at com.zyq.TestOptional.lambda$main$1(TestOptional.java:10)
at java.util.Optional.orElseThrow(Optional.java:290)
at com.zyq.TestOptional.main(TestOptional.java:10)

如果count赋予了初始值的,则显示赋予的初始值。

 

实际项目中使用场景:

package com.zyqtest;

import org.apache.poi.hssf.record.PageBreakRecord;
import org.apache.poi.ss.formula.functions.Choose;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("天");
        list.add("下");
        list.add("无");
        list.add("敌");
        list.add(null);
        System.out.println(list.size());
        Optional.ofNullable(list).map(obj->{
            try{
                int i = 1 / 0;
            }catch (Exception e){
                System.out.println(e.toString());
            }
           return list;
        });
        System.out.println(list.size());
    }


    public int choose(){
        if(1==2)
            return 1;
        return 2;
    }
}

  

运行结果:

5
java.lang.ArithmeticException: / by zero
5

这里要特别注意:前后都是5

posted on 2021-06-16 09:59  ~码铃薯~  阅读(191)  评论(0编辑  收藏  举报

导航