zoukankan      html  css  js  c++  java
  • JDK1.8新特性——Optional类

    JDK1.8新特性——Optional类

    摘要:本文主要学习了JDK1.8新增加的Optional类。

    部分内容来自以下博客:

    https://www.cnblogs.com/1ning/p/9140800.html

    概述

    对于Java开发人员来说,NullPointException是很常见的一个异常,为了避免这个异常,通常的做法是进行if条件判断,但如果代码里面充满了大量的null判断会让程序变的不再优雅。

    所以而JDK1.8中引入了一个新的Optional类,用来处理可能为null的变量,在减少NullPointException的同时,也提升了代码的美观度。但首先我们需要明确的是,它并不是对null关键字的一种替代,而是对于null判定提供了一种更加优雅的实现,从而避免NullPointException。

    获取

    empty()方法

    含义:用来创建一个空的Optional对象。

    代码如下:

    1 Optional<String> name = Optional.empty();

    of()方法

    含义:用来包装一个不为null的对象,如果对象为null,则抛出NullPointException。

    代码如下:

    1 Optional<String> name = Optional.of(str);

    ofNullable()方法

    含义:用来包装一个可以为null的对象,如果对象为null,则创建一个空的Optional对象。

    代码如下:

    1 Optional<String> name = Optional.ofNullable(str);

    常用方法

    isPresent()方法

    含义:用来判断Optional对象是否为空,如果为空则返回true,如果不为空则返回false。

    代码如下:

    1 Optional<String> name = Optional.ofNullable(null);
    2 System.out.println(name.isPresent());// true

    ifPresent()方法

    含义:如果Optional对象不为空则执行方法调用,如果为空则什么也不做。

    代码如下:

    1 Optional<String> name = Optional.ofNullable("name");
    2 name.ifPresent(System.out::println);// name

    get()方法

    含义:如果Optional对象不为空,则返回值,如果为空,则抛出NoSuchElementException。

    代码如下:

    1 Optional<String> name = Optional.ofNullable("name");
    2 System.out.println(name.get());// name

    orElse()方法

    含义:如果Optional对象不为空,则返回值,如果为空,则返回指定的值。

    代码如下:

    1 Optional<String> name = Optional.ofNullable(null);
    2 System.out.println(name.orElse("no name"));// no name

    orElseGet()方法

    含义:如果Optional对象不为空,则返回值,如果为空,则返回由传入的Supplier函数式接口生成的值。

    代码如下:

    1 Optional<String> name = Optional.ofNullable(null);
    2 System.out.println(name.orElseGet(() -> "no name"));// no name

    orElseThrow()方法

    含义:如果Optional对象不为空,则返回值,如果为空,则返回由传入的Supplier函数式接口生成的异常。

    代码如下:

    1 Optional<String> name = Optional.ofNullable(null);
    2 System.out.println(name.orElseThrow(() -> new NullPointerException()));// java.lang.NullPointerException

    filter()方法

    含义:判断Optional的值是否满足filter指定的条件,如果满足则返回原来的Optional对象,如果不满足则创建一个空的Optional对象并返回。

    代码如下:

    1 Optional<String> name = Optional.ofNullable("name").filter(e -> e != null);
    2 System.out.println(name);// Optional[name]

    map()方法

    含义:如果Optional不为空,则执行传入的返回值为任意类型的Function函数式接口并将返回值包装为Optional对象,如果Optional为空,则创建一个空的Optional对象并返回。

    代码如下:

    1 Optional<Integer> length = Optional.ofNullable("name").map(String::length);
    2 System.out.println(length);// Optional[4]

    flatMap()方法

    含义:如果Optional不为空,则执行传入的返回值为Optional类型的Function函数式接口并得到返回的Optional对象,如果Optional为空,则创建一个空的Optional对象并返回。

    代码如下:

    1 User user = null;
    2 user = Optional.ofNullable(user).flatMap(Optional::ofNullable).orElse(new User());
    3 System.out.println(user);// test.User@768debd

    注意事项

    orElse()方法和orElseGet()方法的区别

    这两个方法在调用的Optional对象不为空时,返回的都是原对象。当Optional对象为空时,orElse()方法返回指定的值,orElseGet()方法返回的是接口调用的返回值。

    此外,如果Optional对象如果不为空,orElse()方法也会执行,orElseGet()方法不会执行。

    比如,orElse()方法返回一个新的对象,orElseGet()方法调用接口返回的也是一个新的对象,如果Optional对象不为空,orElse()方法会执行初始化,orElseGet()方法不会执行初始化。

    map()方法和flatMap()方法的区别

    这两个方法在调用的Optional对象为空时,都会创建一个空对象返回。如果Optional对象不为空,map()方法会将执行接口得到的返回值包装为Optional对象,flatMap()方法会直接返回执行接口得到的Optional类型的返回值。

  • 相关阅读:
    font-family常见字体
    MongoDB numa系列问题三:overcommit_memory和zone_reclaim_mode
    MongoDB numa系列问题二:WARNING: You are running on a NUMA machine.
    MongoDB numa系列问题一:[initandlisten] connection refused because too many open connections:
    MongoDB高可用架构:Replica Sets+Sharding
    MongoDB分片配置系列一:
    MongoDB副本集配置系列一:安装MongoDB
    MongoDB副本集配置系列二:配置MongoDB副本集
    Mongostat 2.6详解
    【MongoDB:】稍微复杂的操作
  • 原文地址:https://www.cnblogs.com/shamao/p/11108411.html
Copyright © 2011-2022 走看看