在班级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
)?
答案 0 :(得分:6)
以这种方式:
return sites.stream()
.map(Site::parseStub)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());