作曲 Java 8 个可选
Composing Java 8 Optionals
假设我的代码中有以下选项:
Optional<Integer> a = Optional.of(1);
Optional<Integer> b = Optional.of(1);
Optional<Integer> c = Optional.of(1);
如果它们(a
、b
和 c
)都存在,我需要实现一些逻辑。我怎样才能优雅地做到这一点?
我需要做这样的事情(例如):
...
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();
假设我的代码中有以下选项:
Optional<Integer> a = Optional.of(1);
Optional<Integer> b = Optional.of(1);
Optional<Integer> c = Optional.of(1);
如果它们(a
、b
和 c
)都存在,我需要实现一些逻辑。我怎样才能优雅地做到这一点?
我需要做这样的事情(例如):
...
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();