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来组合可选值函数
略
五、聚合操作
略
Simple is important!