java过滤可选值的最小值
我想得到一个对象列表的函数结果的最小值。
但是这个函数的返回值是可选的。
因此,如果到目前为止还没有设置片段时间,那么返回值应该是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)
对我来说似乎很奇怪,我认为一定有更好的解决方案
# 1 楼答案
从java-9开始,您可以利用平面映射的优势来使用
Optional::stream
:请注意
.min(Double.compare);
的用法不正确,该参数实际上是lambda表达式((d1, d2) -> Double.compare(d1, d2)
,该表达式应缩短为方法引用Double::compare
。也可以使用Comparator.comparingDouble(d -> d)
在java-8的情况下,你必须坚持
.filter(Optional::isPresent).map(Optional::get)