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?
7
A
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
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
Tak, jedynym rozwiązaniem jest pakowacz, który podaje różne cechy. – Holger