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

Jul*_*les 9 java performance java-stream

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

Eug*_*ene 4

您可以围绕现有集合创建 spliterator,例如:

    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
Run Code Online (Sandbox Code Playgroud)