【发布时间】:2015-08-11 02:43:32
【问题描述】:
使用Iterable<T>,很容易:
T last = null;
for (T t : iterable) {
if (last != null && last.compareTo(t) > 0) {
return false;
}
last = t;
}
return true;
但我想不出一种干净的方法来为 Stream<T> 做同样的事情,避免在不必要时消耗所有元素。
【问题讨论】:
-
"避免在不必要的情况下消耗所有元素" 根据排序检查的定义,它是否必须消耗所有元素?
-
@AndyTurner 对于
[2, 1, 3, 4, 5, 6, ...],没有理由忽略前两个元素。 -
哦,当然。但是您必须查看到流的末尾才能知道它 已 排序,例如
[1, 2, 3, 4, 5, ............... <many elements later> 0]. -
不确定这个问题是否有意义:流可能是无限的,并且不能保证流能够被消费两次。所以......也许 Streams 不是你正在做的事情的选择?
-
@GPI 我不必使用它两次,而且我确信这个特定的流不是无限的。使用
StreamAPI 已经使实现非常漂亮和简洁,现在我只想测试它......
标签: java java-8 java-stream