gpt4 book ai didi

Java 8 结果链接

转载 作者:行者123 更新时间:2023-11-30 06:40:08 24 4
gpt4 key购买 nike

我是 Java 8 的新手。

我想在可能使用流的 Java 8 中执行以下操作。有办法吗?主要目标是使用尽可能最好的 Java 8 方式将一种方法的输出馈送到另一种方法。

public Fob getFob(String paramString){
Optional<Foo> foo = getFoo(paramString);
if (foo.isPresent()) {
Optional<Bar> bar = getBar(foo.get().fooParamString);
if (bar.isPresent()) {
Optional<Fob> fob = getFor(bar.get().barParamString);
if (fob.isPresent()) {
return fob.get();
} else {
log.error("fob is not present");
}
} else {
log.error("bar is not present");
}
} else {
log.error("foo is not present");
}
return null;
}

最佳答案

在一条现已删除的评论中,我说要调查 Optional#map(Function)但我现在意识到你实际上应该使用 Optional#flatMap(Function) ,假设日志记录语句不是太重要。这是因为您的映射函数将返回 Optional 对象,但您只关心潜在的包装值。忽略日志记录语句,以下应该等同于您当前的代码:

public Fob getFob(String paramString) {
return getFoo(paramString) // Optional<Foo>
.flatMap(foo -> getBar(foo.fooParamString)) // Optional<Bar>
.flatMap(bar -> getFor(bar.barParamString)) // Optional<Fob>
.orElse(null); // Fob (may be null)
}

这是#flatMap(Function)的文档:

If a value is present, returns the result of applying the given Optional-bearing mapping function to the value, otherwise returns an empty Optional.

This method is similar to map(Function), but the mapping function is one whose result is already an Optional, and if invoked, flatMap does not wrap it within an additional Optional.

基本上,在 Function 返回另一个 Optional 的情况下:

  1. 当使用 map 时,Function 返回的 Optional 被包装在 中由 map 方法返回的可选

    // The function argument is a Function<? super T, ? extends U>
    Optional<Optional<Bar>> opt = getFoo(paramString)
    .map(foo -> getBar(foo.fooParamString));
  2. 当使用 flatMap 时,Function 返回的 Optionalvalue 被包裹在可选flatMap 方法返回。

    // The function argument is a Function<? super T, ? extends Optional<? extends U>>
    Optional<Bar> opt = getFoo(paramString)
    .flatMap(foo -> getBar(foo.fooParamString));

如果您想记录哪个特定值不存在,我认为最简单的选择是将记录语句移动到 getXXX 方法中——尽管这可能并不理想。否则继续使用你当前使用的;没有任何内容表明您必须在新代码中使用 Java 8 功能。我想知道是否需要日志记录语句?如果是,我质疑您为什么在错误级别登录。在最坏的情况下,这看起来像是警告级别的场景,但更有可能是调试级别的场景。

关于Java 8 结果链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58846861/

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