Мне нужно перебрать все элементы ArrayList
, кроме последнего. Поэтому я хочу создать такой итератор. Но мне не нужно реализовывать весь итератор, мне нужно переопределить только метод hasNext()
, поэтому я хотел бы подкласса «стандартного» итератора. Есть ли способ сделать это?Могу ли я подкласса «стандартного» итератора араристов?
ответ
Было бы странно изменять итератор для выполнения этого обхода. Очевидная вещь, чтобы сделать, это написать «алгоритм», как вы хотите: (. Или использовать индекс в предположении RandomAccess
списка)
public static <T> void eachExceptLast(List<? extends T> list, Operation<T> op) {
Iterator<T> iter = list.iterator();
if (!iter.hasNext()) {
return;
}
T item = iter.next();
while (iter.hasNext()) {
op.run(item);
item = iter.next();
}
}
Однако, есть гораздо лучший способ сделать это. list.subList(0, list.size()-1)
(для непустого списка) вернет представление исходного списка за меньшим, чем последний элемент. Он не делает копию, и вы даже можете использовать Iterator.remove
.
Вы можете создать класс, который реализует интерфейсы Iterator
или ListIterator
, а затем переопределяет метод hasNext()
.
Я думаю, что лучший способ сделать это, а не переопределять итератор по умолчанию - это перебрать ArrayList
по своему усмотрению. У ArrayList
есть пара методов, которые могут помочь вам выполнить задачу: get(int)
и size()
.
Все, что вам нужно сделать, это получить общее количество элементов в ArrayList
(с size()
), а затем пропустить элементы, обращающиеся к каждому элементу непосредственно на каждой итерации, используя метод get()
. Ваш код будет выглядеть примерно так:
for(int i = 0; i < myList.size() - 1; i++){
element = myList.get(i);
//do something
}
Теперь с этим принципом в виду, вы можете создать свой собственный класс итерировать ArrayList
.
- 1. Как вернуть араристов-араристов? (Java)
- 2. Где я могу посмотреть на C++ стандартного
- 3. Могу ли я получить значение стандартного ввода в ASP.NET?
- 4. Могу ли я использовать Google Polymer из стандартного приложения Javascript?
- 5. Могу ли я удалить EntityFramework.dll из стандартного проекта MVC 3?
- 6. Могу ли я использовать WebRTC для получения стандартного видеопотока RTP?
- 7. Могу ли я получить доступ к концу только из итератора?
- 8. Могу ли я получить указатель на текущее значение итератора
- 9. Могу ли я использовать этот параллельный шаблон итератора с Cython?
- 10. Могу ли я создать индикатор выполнения загрузки внутри блока итератора?
- 11. Могу ли я реализовать конец итератора() в кольце?
- 12. Могу ли я переопределить переменную итератора в теле цикла?
- 13. Могу ли я легко переопределить категорию (it) итератора (STL)?
- 14. Как я могу получить строку из итератора
- 15. Как я могу использовать Html.DisplayFor внутри итератора?
- 16. Как перебирать араристов разных объектов
- 17. Могу ли я добавлять свойства к подклассу подкласса NSManagedObject?
- 18. Могу ли я определить класс определения класса подкласса в Coffeescript?
- 19. Могу ли я создать экземпляр объекта подкласса от суперкласса
- 20. Могу ли я получить переменные подкласса из массива объектов суперкласса?
- 21. pyqt4: Могу ли я переопределить метод без подкласса?
- 22. Могу ли я сделать статический импорт частного подкласса?
- 23. Могу ли я использовать дженерики для изменения подписи метода подкласса?
- 24. Могу ли я создать конструктор для подкласса QObject?
- 25. Могу ли я использовать drawRect для обновления подкласса UIView?
- 26. Могу ли я передать объект из подкласса в абстрактный класс?
- 27. Как я могу получить int [] из Итератора?
- 28. Как я могу назвать метод подкласса?
- 29. Как я могу проверить цену каждого подкласса?
- 30. Как я могу достичь своего подкласса? C++
+1 это намного проще –