zoukankan      html  css  js  c++  java
  • Java8-Optional 容器类

    1、Optional类是什么?

    Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或者不存在,原来用null

    表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。


    2、常用方法

    ①、Optional.of(T t) : 创建一个Optional实例

    ②、Optional.empty() : 创建一个空的Optional实例

    ③、Optional.ofNullable(T t) : 若t不为null,创建Optional实例,否则创建空实例

    ④、isPresent() : 判断是否包含值

    ⑤、orElse(T t) : 如果其包含值,返回改值,否则返回t

    ⑥、orElseGet(Supplier s) : 如果调用对象包含返回值,返回该值,否则返回s获取的值

    ⑦、map(Function f) : 如果有值对其处理,返回处理后的Optional,否则返回Optional,empty()

    ⑧、flatMap(Function mapper): 与map类似,要求返回值必须是Optional


    3、demo演示

    /**
     * @author houChen
     * @date 2021/1/1 17:10
     * @Description:
     *
     * TestOptional 容器类的常用方法
     */
    public class TestOptional {
    
        /*
        ①、Optional.of(T t) : 创建一个Optional实例
        ②、Optional.empty() : 创建一个空的Optional实例
        ③、Optional.ofNullable(T t) : 若t不为null,创建Optional实例,否则创建空实例
        ④、isPresent() : 判断是否包含值
        ⑤、orElse(T t) : 如果其包含值,返回改值,否则返回t
        ⑥、orElseGet(Supplier s) : 如果调用对象包含返回值,返回该值,否则返回s获取的值
        ⑦、map(Function f) : 如果有值对其处理,返回处理后的Optional,否则返回Optional,empty()
        ⑧、flatMap(Function mapper): 与map类似,要求返回值必须是Optional
         */
    
        //of
        @Test
        public void test1(){
            //【注意】of中不能传入null
            Optional<Employee> op = Optional.of(new Employee());
            Employee employee = op.get();
            System.out.println(employee);
    
        }
    
        //empty
        @Test
        public void test2(){
            Optional<Object> empty = Optional.empty();
        }
    
        //ofNullable
        @Test
        public void test3(){
            Optional<Employee> employee = Optional.ofNullable(new Employee());
    
            Optional<Object> onull = Optional.ofNullable(null);
            System.out.println(onull.get()); //会报错
        }
    
        //isPresent
        @Test
        public void test4(){
            Optional<Object> onull = Optional.ofNullable(null);
            if(onull.isPresent()){
                System.out.println(onull.get());
            }else{
                System.out.println("对象不包含值");
            }
        }
    
        //orElse
        @Test
        public void test5(){
            Optional<Employee> onull = Optional.ofNullable(null);
            if(onull.isPresent()){
                System.out.println(onull.get());
            }
    
            Employee e  = onull.orElse(new Employee("houchen", 24, 12800d));
            System.out.println(e);
        }
    
        //orElseGet(函数式接口)
        @Test
        public void test6(){
            Optional<Employee> onull = Optional.ofNullable(null);
            if(onull.isPresent()){
                System.out.println(onull.get());
            }
    
            Employee lisi = onull.orElseGet(() -> new Employee("lisi", 13, 0d));
            System.out.println(lisi);
        }
    
    
        //map
        @Test
        public void test7(){
            Optional<Employee> op = Optional.ofNullable(new Employee("lisi", 13, 0d));
            //将容器中的对象应用到map中的函数上
            Optional<String> name = op.map((e) -> e.getName());
            System.out.println(name.get());
    
            // flatMap 要求必须返回一个容器类
            Optional<String> opname = op.flatMap((e) -> Optional.of(e.getName()));
        }
    }
  • 相关阅读:
    C#利用反射动态调用类及方法
    系统程序监控软件
    SQL server 2008 安装和远程访问的问题
    sql server 创建临时表
    IIS 时间问题
    windows 2008 安装 sql server 2008
    sql server xml nodes 的使用
    Window 7sp1 安装vs2010 sp1 打开xaml文件崩溃
    CSS资源网址
    Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0
  • 原文地址:https://www.cnblogs.com/houchen/p/14220547.html
Copyright © 2011-2022 走看看