我有一个列表流,我想获取其中元素最少的条目。我当然可以做类似的事情
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 的实现,它不需要通过提供最小值的下界来扫描整个流。
Edit2:没有流的等效迭代解决方案是
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;
}
}
天涯尽头无女友
相关分类