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# 截取窗口图像(包括遮挡窗口,最小化窗口)
    C# 自定义DevExpress中XtraMessageBox的窗口Icon
    C# DevExpress的皮肤,没有在多线程中应用
    DevExpress的RibbonForm在WIN7下标题栏透明,没应用程序设置的Skin
    C# RibbonForm的标题Text显示不完全的解决方法
    C# 使用递归获取文件路径,不获取拒绝访问的文件夹
    socket使用
    KMP模板
    HDU1358(KMP)
    windows环境变量
  • 原文地址:https://www.cnblogs.com/houchen/p/14220547.html
Copyright © 2011-2022 走看看