gpt4 book ai didi

java - 过滤可选值的最小值

转载 作者:行者123 更新时间:2023-12-02 02:46:00 25 4
gpt4 key购买 nike

我想获取对象列表的函数结果的最小值。但该函数的返回值是可选的。因此,如果到目前为止没有设置片段时间,那么返回值应该是 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) 对我来说似乎很奇怪,我认为必须有更好的解决方案.

最佳答案

您可以利用自 起可用的 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)

如果是你必须坚持使用 .filter(Optional::isPresent).map(Optional::get)

关于java - 过滤可选值的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59951032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com