Java8 Optional

Optional

一、Optional 类型

Optional<T> 对象或者是一个对T对象的封装,或者表示不是任何对象。

如果存在被T类型的对象,get方法会返回该对象,否则抛出NoSuchElementException。因此:

Optional<T>   value = .......;
value.get().aMethod();
//并不比下面的方式更安全
T value = ...;
value.aMethod();

isPresent()方法会反映出一个Optional<T>对象是否有值。但这也并不比做非空检验简单。

二、使用Optional的值

高效使用Optional的关键在于,使用一个或者接收正确值、或者返回另一个替代值的方法。

1.当值存在,进行操作,不存在什么都不做

ifPresent方法的另一种形式可以接受一个函数。如果存在可选值,那么就传递该值给函数,

否则不进行任何操作。因此if语句可以改写为:

optionalValue.ifPresent(v results.add(v));

当以上面的形式调用时,不会返回任何值,如果需要对结果进行处理可使用map方法:

Optional<Boolean> added = optionalValue.map(result::add);

2.没有值存在时,产生一个可选值或抛出异常:

//如果没有给一个空串
String result = optionalString.orEles("");

也可以:

String result = optionalStr.orElseGet(() -> System.getProperty("user.dir"));

还可以:

String result = optionalString.orElseThrow(NoSuchElementException::new);

三、创建可选值

前面讨论的如何处理一个其他人创建的Optional对象。如果你想编写一个创建Optional对象的方法,

有一些静态方法可以选择。例如,Optional.of(result)或者Optional.empty():

public static Optional<Double> inverse(Double x) {
    return x == 0 ? Optional.empty() : Optional.of(1 / x);
}

ofNullable方法被设计为null值和可选值之间的一座桥梁。如果obj不为null,

那么Optional.ofNullable(obj)会返回Optional.of(obj)否则返回Optional.empty().

四、使用flatMap来组合可选值函数

五、聚合操作

posted @ 2019-06-28 16:18  Shadowplay  阅读(238)  评论(0编辑  收藏  举报