作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获取对象列表的函数结果的最小值。但该函数的返回值是可选的。因此,如果到目前为止没有设置片段时间,那么返回值应该是 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)
对我来说似乎很奇怪,我认为必须有更好的解决方案.
最佳答案
您可以利用自 java-9 起可用的 Optional::stream
进行平面映射的优势:
return entries.stream() // Stream<Entry>
.map(e -> e.getFragmentTime(fragment)) // Stream<Optional<Double>>
.flatMap(Optional::stream) // Stream<Double>
.min(Double::compare); // Optional<Double>
注意 .min(Double.compare);
不是正确的用法,该参数实际上是 lambda 表达式 ((d1, d2) -> Double.compare(d1, d2)
应缩写为方法引用 Double::compare
。也可以使用 Comparator.comparingDouble(d -> d)
。
如果是java-8你必须坚持使用 .filter(Optional::isPresent).map(Optional::get)
。
关于java - 过滤可选值的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59951032/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!