與C#不同IEnumerable,在C#中,執(zhí)行管道可以執(zhí)行任意多次,而在Java中,流只能“迭代”一次。對終端操作的任何調(diào)用都會關(guān)閉流,使其無法使用。這種“功能”帶走了很多力量。我想這不是技術(shù)原因。這種奇怪的限制背后的設(shè)計考慮是什么?編輯:為了演示我在說什么,請考慮以下C#中的Quick-Sort實現(xiàn):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));}現(xiàn)在確定,我不主張這是快速排序的良好實現(xiàn)!但是,這是將lambda表達與流操作相結(jié)合的表達能力的一個很好的例子。而且它不能用Java完成!我什至不能問一個流是否為空而不使它無法使用。
添加回答
舉報
0/150
提交
取消