正如this question中所讨论的,distinct()
的实现能够在运行的流知道要对其进行排序时使用更有效的算法。如果我们知道流已经排序(例如,因为它来自外部预先排序的数据源,例如带有order by
子句的SQL查询),我们如何才能获得类似的结果但是并没有这样标记?有一个unordered()
操作删除了排序标志,但据我所知,没有办法告诉系统数据是在外部排序的。
答案 0 :(得分:4)
您可以围绕现有集合创建分裂器,例如:
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