五、java8其他新特性

目录

第一节:optional类

一、optional类概述

1、optional类

2、optional类常用方法

二、optional类概示例

1、代码示例

2、运行效果


第一节:optional类

一、optional类概述

1、optional类

Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或者不存在,原来用null表示一个值不存在,现在optional可以更好地表达这个概念,并且可以避免空指针异常;另外,可以通过optional抛出的异常,快速的定位到一场所在的位置,便于调试;

2、optional类常用方法

1)、Optional.of(T t);

该方法用于创建一个optional实例;

2)、Optional.empty();

该方法用于创建一个空的Option实例;

3)、Optional.ofNullable(T t);

如t不为null,则创建Optional实例,否则创建空实例;

4)、isPresent();

该方法用于判断是否包含值;

5)、orElse(T t);

该方法用于调用对象包含值、返回值、否则返回t;

6)、orElseGet(Supplier s);

该方法用于调用对象包含值,返回该值,否则返回s获取的值;

7)、map(Functioon f);

如果有值对其进行处理,并返回处理后的optional,否则返回option.empty();

8)、flatMap(Function mapper);

与map类似,要求返回值必须是Optional;

 

二、optional类概示例

1、代码示例

packageoptional;

 

importjava.util.Optional;

 

import 为什么要使用lambad表达式.entity.Employee;

import 为什么要使用lambad表达式.entity.Employee.Status;

 

public classTestOptional {

   

    public static voidmain(String[]args) {

        //test1();

        //test2();

        //test3();

        //test4();

        //test5();

        //test6();

        //test7();

        test8();

    }

   

    /**

     *构建一个optional并获取其中的实例

     */

    public static voidtest1() {

        //构建一个optional

        Optional<Employee>op= Optional.of(newEmployee());

        //获取optional中的实例

        Employeeemployee=op.get();

        System.out.println(employee);

    }

   

    /**

     *构建一个为null(空)的optional

     */

    public static voidtest2() {

        Optional<Object>empty= Optional.empty();

        System.out.println(empty.get());

    }

   

    /**

     *如t不为null,则创建Optional实例,否则创建空optional实例;

     */

    public static voidtest3() {

        //is not null

        Optional<Employee>op1= Optional.ofNullable(newEmployee());

        System.out.println(op1.get());

       

        //为null

        Optional<Employee>op2= Optional.ofNullable(null);

        System.out.println(op2.get());

    }

   

    /**

     *判断是否包含值

     */

    public static voidtest4() {

        Optional<Employee>op= Optional.ofNullable(null);

        if(op.isPresent()) {

            op.get();

        }else{

            System.out.println("optional中值为null");

        }

    }

   

    /**

     *如果op中包含值,则返回该值;

     *如果op中不包含值,则返回一个替代实例;

     */

    public static voidtest5() {

        Optional<Employee>op= Optional.ofNullable(null);

        System.out.println(op.orElse(newEmployee()));

    }

   

    /**

     *如果op中包含值,则返回该值;

     *如果op中不包含值,则返回一个Supplier获取的值

     *在Supplier中,我们可以实现各种逻辑的处理后,

     *返回一个比较有好的或者合乎业务逻辑的值;

     */

    public static voidtest6() {

        Optional<Employee>op= Optional.ofNullable(null);

        System.out.println(op.orElseGet(()->{

            /*

             *在这里可以实现五花八门的逻辑

             */

            return newEmployee();

        }));

    }

 

    /**

     *如果有值对其进行处理,并返回处理后的optional,

     *否则返回option.empty();

     */

    public static voidtest7() {

        Optional<Employee>op= Optional.ofNullable(newEmployee("张三",18,888.88,Status.FREE));

        Optional<String>res=op.map((e)->e.getName());

        System.out.println(res.get());

    }

   

    /**

     *与map类似,要求返回值必须是Optional;

     */

    public static voidtest8() {

        Optional<Employee>op= Optional.ofNullable(newEmployee("张三",18,888.88,Status.FREE));

        Optional<String>res=op.flatMap((e)->Optional.of(e.getName()));

        System.out.println(res.get());

    }

}

2、运行效果

自己回去慢慢试着运行吧;

好了,到这里基本上java8里面常用的部分就已经全部讲完了,接下来我们看进阶部分;

 


版权声明:本文为hkkbbw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。