Я предоставляю библиотеку для другой команды. Один из методов, которые я предоставляю, получает в качестве аргумента Итератор. Я хотел бы как-то потребовать определенного порядка итерации. Есть ли способ сделать это в коде, расширив Iterator?Выполнение заказа в Java Iterator
ответ
Не напрямую. Итератор сделан только для того, чтобы дать вам элемент вовремя, избегая хранения в памяти и передавая целый список значений, что иногда может быть неосуществимым.
Если у вас нет больше знаний о том, как генерируются значения и какие ограничения должны применяться к сортировке данных, единственный способ - получить все элементы из итератора, сохранить их в каком-либо списке/векторе/базе данных, сортировать их и возвращать другой итератор, используя отсортированный список.
Спасибо. Как указано выше, akaIDIOT, я укажу это требование в документации. Я все еще не уверен, является ли проверка требования и выбрасывание исключения хорошей идеей. Я не буду хранить элементы в списке, так как мой итератор - это просто оболочка для базы данных ResultSet, которая потенциально может быть довольно большой. – MrMulliner
Вы переданы, как аргумент, экземпляр некоторого конкретного класса, который реализует Iterator. Вы не можете расширить свой класс, потому что его класс определяется после создания экземпляра, который выполняется с помощью кода, который вызывает ваш метод.
Если вы хотите потерпеть неудачу быстро, когда требуемый порядок не соблюдается, попробуйте Guava's Ordering.isOrdered() method.
NB Это будет работать только если ваш аргумент является Iterable, а не итератора. Вам нужно, чтобы он был Iterable (интерфейс, который позволяет вам извлекать Iterator), чтобы вы могли повторять итерацию дважды: один раз для проверки порядка, один раз для обработки.
- 1. Gradle Plugin Выполнение заказа
- 2. tkinter последовательное выполнение заказа
- 3. Выполнение заказа нити?
- 4. git hook Выполнение заказа
- 5. Выполнение заказа нескольких потоков
- 6. Выполнение заказа плагина Maven
- 7. выполнение заказа простой функции
- 8. Выполнение оптимального заказа
- 9. Создание пользовательской Iterator Java?
- 10. JAVA Iterator с условием
- 11. Java Array Tree Iterator
- 12. Отладка на Iterator Java
- 13. Iterator Java Linked Lists
- 14. Использование JAVA Iterator
- 15. Iterator over HashMap в Java
- 16. Сложность времени Iterator() в java
- 17. Set Iterator toString - JAVA
- 18. 2 формы Java Iterator
- 19. Java Iterator Бесконечная петля
- 20. Перечисление Java против Iterator
- 21. Queue Iterator с Java
- 22. Понимание Java Iterator
- 23. java list iterator
- 24. Iterator java вложенная петля
- 25. Java Iterator как класс?
- 26. Java Iterator, поддерживаемый ResultSet
- 27. Iterator concurrentmodificationerror (Java)
- 28. Java Iterator Concurrency
- 29. Java hashmap iterator
- 30. Maven SQL плагин выполнение заказа
Поскольку вы получаете итератор, и вы * требуете * что-то, это требование должно быть как минимум указано в документации вашего метода. – akaIDIOT
Итератор может быть из коллекции, которая будет или не будет поддерживать порядок. – rajesh
В дополнение к akaIDIOT вы можете проверить состояние своего заказа во время итерации и выбросить 'IllegalArgumentException', если порядок отклонится. – Kai