与c#的IEnumerable
不同,在c#中,一个执行管道可以被我们想执行多少次就执行多少次,而在Java中,一个流只能被“迭代”一次。
我想原因是不技术。这种奇怪的限制背后的设计考虑是什么?
编辑:为了演示我所说的内容,请考虑以下c#中快速排序的实现:
IEnumerable<int> QuickSort(IEnumerable<int> ints)
{
if (!ints.Any()) {
return Enumerable.Empty<int>();
}
int pivot = ints.First();
IEnumerable<int> lt = ints.Where(i => i < pivot);
IEnumerable<int> gt = ints.Where(i => i > pivot);
return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt));
}
现在可以肯定的是,我并不主张这是一个快速排序的良好实现!然而,这是lambda表达式与流操作相结合的强大表达能力的一个很好的例子。
这在Java中是做不到的! 我甚至不能在不导致流不可用的情况下询问流是否为空。< / p >