Java Streams: distinct() в предварительно отсортированном потоке?
как говорится в этот вопрос реализация distinct()
может использовать более эффективный алгоритм, когда поток, с которым он работает, известен среде выполнения для сортировки. Как мы можем достичь подобного результата, если мы знайте, что поток отсортирован (например, потому, что он пришел из внешнего предварительно отсортированного источника данных, такого как SQL-запрос с order by
предложение), но не помечено как таковое? Есть unordered()
операция, которая удаляет флаги заказа, но насколько я вижу, нет способа сообщить системе, что данные были упорядочены извне.
1 ответов
вы можете создать свой 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