Answers:
您可以使用grepcode.com来搜索Java标准库代码(和其他一些库)。不幸的是,流实现代码相当抽象。一个很好的起点是内部java.util.stream.SortedOps
类,该类将流转换为排序的流。
在当前的实现(用于标准库容器的流)使得如果流已排序的无操作,使用数组,如果流的大小是已知的(SizedRefSortingSink
),或累积的所有元素在一个ArrayList如果尺寸未知(RefSortingSink
)。
当然,此类实现细节可能随任何发行版而变化,但是基本考虑因素是普遍的:对流进行排序必然是一个急切/阻塞的操作,而对无限流进行排序则没有意义。这意味着如果您使用流,则对流进行排序没有用,因为它们可能是惰性的,但是您仍然可以获得方便的流语法。
其他流将不得不提供自己的实现Stream.sorted()
,这可能很相似。