作曲 Java 8 个可选

Composing Java 8 Optionals

假设我的代码中有以下选项:

Optional<Integer> a = Optional.of(1);
Optional<Integer> b = Optional.of(1);
Optional<Integer> c = Optional.of(1);

如果它们(abc)都存在,我需要实现一些逻辑。我怎样才能优雅地做到这一点?

我需要做这样的事情(例如):

...
if (a.isPresent() && b.isPresent() && c.isPresent()) {
    return a.get() + b.get() + c.get();
}
...

这里:

Optional<Integer> a = Optional.of(1);
Optional<Integer> b = Optional.of(1);
Optional<Integer> c = Optional.of(1);

问题是:当你像这样声明 "independent" 变量时,你也必须处理它们(编写代码!)"independently"。

换句话说:要么使用 Stream.of()Arrays.asList(a, b, c) 之类的东西进行进一步处理;或者直接在创建时将这些 "constants" 放入 list/array 中。

因为只有这样您才能转向流逻辑,如 Luis 的评论中所述。

您可以从所有这些创建流并执行减少操作:

Stream.of(a, b, c)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .mapToInt(Integer::intValue)
    .sum();