gpt4 book ai didi

java - 嵌套Optional.map的优雅替代品?

转载 作者:行者123 更新时间:2023-11-30 01:46:09 25 4
gpt4 key购买 nike

我有多个必须映射到 POJO 的可选值。还有比下面更好的选择吗?

class SimplePojo {
private String stringField;
private Integer integerField;
// All args. constructor, getter, setter
}

Optional<String> stringOptional = ...
Optional<Integer> integerOptional = ...
Optional<SimplePojo> simplePojoOptional = stringOptional.flatMap(
string -> integerOptional.map(integer -> new SimplePojo(string, integer)))

为了保持简短,我在上面的示例中将问题减少到了 2 个可选值。但实际上我有 3 个选项,还有更多选项正在准备中。恐怕最后一行很快就会变得难以使用。

请注意:使用 Vavr 或函数式 Java 等函数式框架不适合我。

最佳答案

使用Builder怎么样?

class SimplePojo {

public static class Builder {
private String stringField;

public Builder withStringField(String str) {
this.stringField = str;
return this;
}
// and other "with" methods...


public Optional<SimplePojo> build() {
if (stringField == null || anotherField == null /* and so forth */) {
return Optional.empty();
} else {
return Optional.of(new SimplePojo(this));
}
}
}
private final String stringField;

/* private constructor, so client code has to go through the Builder */
private SimplePojo(Builder builder) {
this.stringField = builder.stringField;
// etc.
}
}

然后您可以按如下方式使用它:

SimplePojo.Builder builder = new SimplePojo.builder();
optionalStringField.ifPresent(builder::withStringField);
// etc.
return builder.build();

关于java - 嵌套Optional.map的优雅替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com