五、java8其他新特性

本文详细介绍了Java 8中的Optional类,包括其设计理念、常用方法如of、empty、ofNullable、isPresent、orElse、orElseGet、map和flatMap等,并通过多个代码示例展示了如何在实际开发中有效利用Optional来避免空指针异常,提高代码的健壮性和可读性。
摘要由CSDN通过智能技术生成

目录

第一节: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、代码示例

package optional;

 

import java.util.Optional;

 

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

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

 

public class TestOptional {

   

    public static void main(String[] args) {

        //test1();

        //test2();

        //test3();

        //test4();

        //test5();

        //test6();

        //test7();

        test8();

    }

   

    /**

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

     */

    public static void test1() {

        //构建一个optional

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

        //获取optional中的实例

        Employee employee = op.get();

        System.out.println(employee);

    }

   

    /**

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

     */

    public static void test2() {

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

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

    }

   

    /**

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

     */

    public static void test3() {

        //is not null

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

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

       

        //为null

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

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

    }

   

    /**

     * 判断是否包含值

     */

    public static void test4() {

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

        if(op.isPresent()) {

            op.get();

        }else {

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

        }

    }

   

    /**

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

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

     */

    public static void test5() {

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

        System.out.println(op.orElse(new Employee()));

    }

   

    /**

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

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

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

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

     */

    public static void test6() {

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

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

            /*

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

             */

            return new Employee();

        }));

    }

 

    /**

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

     * 否则返回option.empty();

     */

    public static void test7() {

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

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

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

    }

   

    /**

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

     */

    public static void test8() {

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

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

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

    }

}

2、运行效果

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值