如this question中所讨论的,当运行时已知要对它进行操作的流进行排序时,distinct()
的实现能够使用更高效的算法。如果我们知道流已排序(例如,因为它来自外部预先排序的数据源,例如带有order by
子句的SQL查询),如何获得相似的结果呢?有一个unordered()
操作可删除排序标志,但是据我所知,没有办法告诉系统数据已在外部排序。
最佳答案
您可以围绕现有集合创建拆分器,例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4);
Spliterator<Integer> sp = Spliterators.spliterator(list, Spliterator.SORTED);
System.out.println(sp.hasCharacteristics(Spliterator.SORTED)); // true