【问题标题】:Transform Optional String and return Date in Java 8?在 Java 8 中转换可选字符串并返回日期?
【发布时间】:2016-11-16 14:42:08
【问题描述】:

我目前正在将一个可为空的字符串解析为一个日期。我尝试使用 Optional 来避免使用 if 语句。这是我到目前为止所写的:

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);
    }
});

是否可以转换此 lambda,以便我可以使其成为类似于以下但 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;
}

【问题讨论】:

    标签: java-8 optional


    【解决方案1】:

    不确定你想走多远,但你可以开始

    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 时间类;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 2012-06-28
      • 2020-09-01
      • 2021-09-19
      • 2012-06-03
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多