【发布时间】:2020-01-28 14:33:14
【问题描述】:
我想得到一个对象列表的函数结果的最小值。
但是这个函数的返回值是可选的。
所以如果到目前为止没有设置分片时间就可以了,返回值应该是Optional.empty()
public Optional<Double> getFragmentTime(int fragment) {
...
}
private List<Entry> entries; // will be filled in the ctor.
public Optional<Double> getMinFragmentTime(int fragment) {
return entries.stream()
.map(e -> e.getFragmentTime(fragment))
.filter(Optional::isPresent)
.map(Optional::get)
.min(Double::compare);
}
这是存档的正确方法吗?
两个函数调用.filter(Optional.isPresent) 和.map(Optional.get) 对我来说似乎很奇怪,我认为必须有更好的解决方案。
【问题讨论】:
-
好吧,您可以将
filter(...).map(...)替换为flatMap(Optional::stream)以仅获取当前可选值的流。 -
非常感谢,我还在学习各种不同的流方法,这似乎是一个更好的解决方案
标签: java java-8 java-stream optional