gpt4 book ai didi

具有已知界限的 Java Stream 最小值

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:12 24 4
gpt4 key购买 nike

<分区>

我有一个列表流,我想从中获取元素最少的条目。我当然可以做类似的事情

Stream<List<T>> s = ...
s.min((e1, e2) -> e1.size() - e2.size());

但在这种情况下,我们知道最小值的下限,因为大小是非负的。这意味着当找到大小为 0 的列表时,我们实际上可以停止,而不是遍历列表的其余部分。这可以通过 Java Streams 以适当的方式实现吗?

我会想象它看起来像这样,提供一个比较器和一个函数来告诉我们当前最小值何时是全局最小值:

s.boundedMin(
(e1, e2) -> e1.size() - e2.size(),
e -> e.size() == 0
)

我想不出实现它的方法。

当然,我可以只使用 Iterable 并使用带有 break 语句的循环来获得它,我只是想知道流是否也可以让我到达那里。

编辑:为了让它更清楚一点。流可能可能不包含大小为 0 的列表。我的问题是 min() 将贯穿整个流,即使它已经找到大小为 0 的列表(这已经是它所能达到的最小了)。因此,我正在寻找的是一种不需要扫描整个流的 min 实现,它通过提供最小值的下限来实现。

编辑2:没有流的等效迭代解决方案是

List<List<T>> s = ...
List<T> min = null;
for (List<T> l : s) {
if (min == null || min.size() > l.size())
min = l;
if (min.size() == 0) {
break;
}
}

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