Java1.8新特性——Optional类

Java1.8新特性——Optional类

摘要:本文主要学习了Java1.8新增长的Optional类。html

部份内容来自如下博客:java

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

概述

对于Java开发人员来讲,NullPointException是很常见的一个异常,为了不这个异常,一般的作法是进行if条件判断,但若是代码里面充满了大量的null判断会让程序变的再也不优雅。学习

因此而Java1.8中引入了一个新的Optional类,用来处理可能为null的变量,在减小NullPointException的同时,也提高了代码的美观度。但首先咱们须要明确的是,它并非对null关键字的一种替代,而是对于null断定提供了一种更加优雅的实现,从而避免NullPointException。spa

获取

empty()方法

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

代码以下:htm

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

of()方法

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

代码以下:blog

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类型的返回值。

相关文章
相关标签/搜索