使用Optional Java 8避免在List处理中进行“空检查”

时间:2015-12-09 03:08:55

标签: functional-programming java-8 nullable java-stream optional

在班级Site中,我有两种实用方法。

如果没有错误发生,则第一个parseStub会将Site解析为Master ;否则,它返回null。使用Optional

public static Optional<Master> parseStub(Site site) {
    // do some parse work; return Optional.empty() if the parse fails.
}

第二种方法parseStubs是将Site列表解析为Master列表。它重用parseStub,并且必须处理可能为空的Optional<Master>

public static List<Master> parseStubs(List<Site> sites) {
    return sites.stream()
            .<Master>map(site -> Site.parseStub(site).orElse(null))
            .filter(Objects::nonNull)
            .collect(Collectors.toList());
}
  

请注意,在上面的代码中,我再次介绍了null   如何一致地使用null来避免filter(Objects::nonNull)(和Optional)?

1 个答案:

答案 0 :(得分:6)

以这种方式:

return sites.stream()
        .map(Site::parseStub)
        .filter(Optional::isPresent)
        .map(Optional::get)
        .collect(Collectors.toList());