2017-09-12 10 views
7

this questionで説明したように、distinct()の実装は、それが動作するストリームをソートするランタイムによって知られている場合に、より効率的なアルゴリズムを使用することができます。どのように我々は、ストリームがソートされていることを知って場合にも、同様の結果を得ることができます(例えば、それは、そのようなorder by句を指定したSQLクエリとして、外部からの事前ソートされたデータソースから来たので)が、このようなとしてフラグ付けされていませんか?私の知る限り、データが外部に発注されたシステムに伝える手立てを見ることができないとして、発注フラグを削除しますが、unordered()操作があります。Javaストリーム:事前ソートされたストリームの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

関連する問題