hen*_*xin 1 functional-programming nullable optional java-8 java-stream
在Class中Site,我有两种实用方法.
第一个,如果没有错误发生parseStub,则解析Site为a ; 否则,它返回.使用:Master nullOptional
public static Optional<Master> parseStub(Site site) {
// do some parse work; return Optional.empty() if the parse fails.
}
Run Code Online (Sandbox Code Playgroud)
第二种方法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());
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的代码中,我
null再次介绍.
我怎么能避免null(和filter(Objects::nonNull))使用Optional一致?
这是一种方式:
return sites.stream()
.map(Site::parseStub)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)