1

Site類中,我有兩種實用方法。使用Java 8的可選項在列表處理中避免「空檢查」

第一個,parseStub,解析一個SiteMaster如果沒有發生錯誤;否則,返回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

+3

的Java 9:'flatMap(網站 - > Site.parseStub(網站).stream())收集(toList())' – Holger

回答

6

這裏有一種方法:

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