java - 使用具有可选值的构建器模式的更好方法?

标签 java java-8 option-type

我们正在使用构建器模式为服务创建一些输入,它看起来像这样(简化):

final SomeInput input = SomeInput.builder()
    .withSomeId(....) 
    .withSomeState(....)
    ...
    .build();

我们想在 SomeInput 中设置一些属性,但前提是它存在。所以在创建对象之后,我会做这样的事情:

Optional<String> secondaryId = infoProvider.getSecondaryId();
if (secondaryId.isPresent()) {
   input.setSecondaryId(secondaryId.get());
}

我在想:

a) 有没有更好/更清洁的方法来做到这一点? b) 如果我确实需要这样做,我可以避免使用“if”语句并使用 Optional 的某些功能吗?

(注意:我无法更改构建器本身,我也无法确定 secondaryId 是一个字符串,但我们从 infoProvider 中检索到的内容是可选的)

最佳答案

更简洁的方法是使用 ifPresent

secondaryId.ifPresent(input::setSecondaryId);

但这几乎是满足这些要求的最佳选择。

关于java - 使用具有可选值的构建器模式的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896248/

相关文章:

java - 如何将 Stream<String[]> 转换为 Stream<String>?

java - ElasticSearch:不推荐在批量请求中指定类型

java - hibernate复合主键中存在find而不覆盖equals和hashCode

Java 8 Lambda 重载

Java 8 stream.collect(Collectors.groupingBy()) 在 JPA 获取的列表/对象上使用时返回大小为 0 的映射

具有隐式解包可选的 Swift 一元运算符

c++ - c++ 方法头部的可选函数

swift - 在 Swift 2.2 中显式展开对可选属性的赋值

java - Struts2 Ognl 标签中的日期比较

java - 如何使用 findAny() 而不返回 null