2017-09-12 18 views
7

Jak omówiono w dokumencie this question, implementacja distinct() jest w stanie użyć bardziej wydajnego algorytmu, gdy strumień, na którym działa, jest znany podczas sortowania. Jak możemy osiągnąć podobny wynik, jeśli wiemy, że strumień jest sortowany (np. Ponieważ pochodzi on z zewnętrznego wstępnie posortowanego źródła danych, takiego jak zapytanie SQL z klauzulą ​​order by), ale nie jest oznaczony jako taki? Jest operacja unordered(), która usuwa flagi zamawiania, ale z tego, co widzę, nie można powiedzieć systemowi, że dane zostały zamówione na zewnątrz.Strumienie Java: distinct() na wstępnie posortowanym strumieniu?

Odpowiedz

3

Można by utworzyć spliterator wokół istniejącej kolekcji na przykład:

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

strumieni używam są wytwarzane przez bibliotekę strony trzeciej, więc nie tworzą spliterators się w ogóle. Sądzę, że mogę * użyć * pewnego rodzaju spliteratora proxy, który może działać. – Jules

+0

Tak, jedynym rozwiązaniem jest pakowacz, który podaje różne cechy. – Holger

Powiązane problemy