gpt4 book ai didi

Java 可选获取如果存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:35 25 4
gpt4 key购买 nike

我有一个 java 可选对象,如果它存在,我只想获取它。这里明显的代码是:

JsonGenerator gen;
if(value.isPresent()) {
gen.writeObject(value.get());
}

但我想看看是否可以使用 ifPresent 方法将其简化为 1 行。如果它不存在,我根本不希望它写。我试过这样的事情:

gen.writeObject(value.ifPresent(a -> a));

但这显然行不通。有什么办法可以做我想做的事吗?我在网上研究的所有内容都只显示了 ifPresent 与谓词方法调用的使用。

编辑 1:我尝试了 Tunaki 的解决方案,但出现以下错误:

Error:(25, 46) java: incompatible thrown types java.io.IOException in method reference

这是我的整个代码块:

public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
value.getFooA().ifPresent(gen::writeObject);
}
}

我什至试过:

public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
try {
value.getContactInfo().ifPresent(gen::writeObject);
} catch(IOException e) {
throw new UncheckedIOException(e);
}
}
}

但它仍然给我错误。

最佳答案

您可以调用 gen.writeObject 作为 ifPresent 中对象的使用者:

value.ifPresent(gen::writeObject);

仅当 Optional 不为空时才会调用该方法。

在您的示例中,方法writeObject 抛出已检查的异常IOException;您将需要捕获它并抛出运行时异常(例如新的 UncheckedIOException ,这会使代码复杂化)或执行其他操作(例如记录它):

value.ifPresent(v -> {
try {
gen.writeObject(v);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
});

关于Java 可选获取如果存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37036846/

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