2016-11-16 52 views
-2

我目前正在將可空字符串解析爲日期。我嘗試使用可選來避免使用if語句。以下是我迄今寫:在Java 8中轉換可選字符串並返回日期?

Client client = new Client(); 

Optional.ofNullable(methodThatMayReturnStringOrNull()) 
.ifPresent((s) -> { 
    try { 
    client.setBirthDate(DateUtils.parseDate(
     StringUtils.substring(s, 0, 10), 
     new String[]{"yyyy-MM-dd"})); 
    } catch (ParseException e) { 
     throw new TechnicalException("error.parsing.date", e); 
    } 
}); 

是否有可能將這一拉姆達所以我可以把它類似於以下但Java 8風格的方法?

private Date parse(String complexString) { 
    Date birthDate = null; 
    if (complexString != null) { 
     try { 
      birthDate = DateUtils.parseDate(
        StringUtils.substring(complexString, 0, 10), 
        new String[]{"yyyy-MM-dd"}); 
     } catch (final ParseException e) { 
      throw new TechnicalException("error.parsing.date", e); 
     } 
    } 
    return birthDate; 
} 

回答

0

不知道你要能走多遠,但你可以

Optional<Date> date = Optional.ofNullable(methodThatMayReturnStringOrNull()) 
.map((s) -> { 
    try { 
    return DateUtils.parseDate(
     StringUtils.substring(s, 0, 10), 
     new String[]{"yyyy-MM-dd"})); 
    } catch (ParseException e) { 
     throw new TechnicalException("error.parsing.date", e); 
    } 
}); 

開始,您還可以考慮使用flatMap代替map和返回空可選,而不是在錯誤引發異常 - 取決於你想如何推進你的流程。

在完全無關的筆記上,擺脫Date並使用joda或新的java時間類;)