讨论/《Java 实战(第 2 版)》 - 11.4.4 把所有内容整合起来/
《Java 实战(第 2 版)》 - 11.4.4 把所有内容整合起来
共 1 个回复

答案:如果需要访问的属性值不存在,Properties.getProperty(String)方法的返回值就是一个null,使用ofNullable工厂方法可以方便地将该值转换为Optional对象。接着,你可以向它的flatMap方法传递代码清单11-7中实现的OptionalUtility.stringToInt方法的引用,将Optional<String>转换为Optional<Integer>。最后,你非常轻易地就可以过滤掉负数。这种方式下,如果任何一个操作返回一个空的Optional对象,该方法都会返回orElse方法设置的默认值0;否则就返回封装在Optional对象中的正整数。下面就是这段简化的实现:

public int readDuration(Properties props, String name) {
return Optional.ofNullable(props.getProperty(name))
               .flatMap(OptionalUtility::stringToInt)
               .filter(i -> i > 0)
               .orElse(0);
}