gpt4 book ai didi

java - Java 将 Optional<> 映射到对象而不是另一个对象的现有方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:45:55 26 4
gpt4 key购买 nike

我熟悉Optional.map(mapper) ,它将可选对象映射到其他对象。所以如果我想用可选的 Foo 做点什么和一个非可选的 Bar ,我可以这样做:

Optional<Foo> foobar = foo.map(foo -> foo.addBar(bar))

这有点像:

Optional<Foo> foobar = foo.isPresent() ? Optional.of(foo.get().add(bar)) : Optional.empty();

但我看到一个重复出现的模式,其中 bar 是可选的。我想要复制的功能看起来像这样:

Foo foobar = bar.isPresent() ? foo.add(bar.get()) : foo;

换句话说,如果存在其他事物,就让我对现有事物做些事情;否则,就把我现有的东西还给我。

我可以想象自己制作 Optionals.doIfOtherPresent(T object, Optional<U> optional, BiFunction<? super T, ? super U, ? extends T> fn) .我会这样使用它:

Foo foobar = doIfOtherPresent(foo, bar, foo::add);

Java 库中是否已经有这样做的东西?

最佳答案

使用 bar而不是 foo似乎简化了它:

Foo foobar = bar
.map(b -> foo.map(f -> f.add(b)))
.orElse(foo)
.orElse(null); // if foo is not present

bar.map(b -> foo.map(f -> f.add(b)))返回 Optional<Optional<Foo>>如果 bar 就是“存在”存在。

.orElse(foo)恢复为原来的 Optional<Foo>如果bar不存在(否则返回 foo.map(f -> f.add(b)))。

关于java - Java 将 Optional<> 映射到对象而不是另一个对象的现有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53784899/

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