Java Streams:预排序流上的distinct()?

时间:2017-09-12 13:17:19

标签: java performance java-stream

正如this question中所讨论的,distinct()的实现能够在运行的流知道要对其进行排序时使用更有效的算法。如果我们知道流已经排序(例如,因为它来自外部预先排序的数据源,例如带有order by子句的SQL查询),我们如何才能获得类似的结果但是并没有这样标记?有一个unordered()操作删除了排序标志,但据我所知,没有办法告诉系统数据是在外部排序的。

1 个答案:

答案 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