2017-09-12 45 views
7

如在this question中所述,distinct()的實現能夠在運行時知道其操作的流被排序時使用更高效的算法。如果我們知道該流是排序的(例如,因爲它來自外部預先排序的數據源,例如帶有order by子句的SQL查詢),但是沒有被標記爲這樣,我們如何才能達到類似的結果?有一個unordered()操作可以刪除排序標誌,但據我所知,沒有辦法告訴系統數據已經從外部排序。Java Streams:預排序流上的distinct()?

回答

3

你可以創建你的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 
+0

我使用第三方庫中產生的數據流,所以我完全不創造spliterators自己。我想我*可以使用某種代理分割器,這可能會起作用。 – Jules

+0

是的,報告不同特徵的包裝分割器似乎是唯一的解決方案。 – Holger