Итератор, который будет брать за основу другой итератор и возвращать каждый k-й элемент из коллекции
учу сейчас итераторы, и у меня есть 2 задания которые никак не могу понять как сделать. Реализуйте итератор, который будет брать за основу другой итератор и возвращать каждый k-й элемент из коллекции. 2. Реализовать в качестве итератора генератор чисел Фиббоначи (два первых числа 1 и 1, каждое следующее число является суммой двух предыдущих чисел): 1, 1, 2, 3, 5, 8, 11 и т. д.
Вот по первому заданию я думал делать это как то так, но во первых это не работает почему-то, во вторых в задании сказано использовать другой итератор в качестве основы, то-есть надо использовать 2 итератора.
Вроде как задания лёгкие, но всё равно не получается...
Буду очень благодарен за ответ
Ответы (1 шт):
Мне кажется,что тут подход неправильный. Я бы имплементировал итератор и переопределял его методы, чтобы получить кастомную реализацию для подобных заданий:
import java.util.Iterator;
public class CustomIterator<T> implements Iterator<T> {
private final Iterator<T> iterator;
private final int step;
private boolean isFirstelement;
public CustomIterator(Iterable<T> itrb, int step) {
this.iterator = itrb.iterator();
this.step = step;
this.isFirstelement = true;
}
@Override
public boolean hasNext() {
int count = 1;
while (iterator.hasNext()) {
if (isFirstelement) {
isFirstelement = false;
return true;
}
if (count==step) return true;
iterator.next();
count++;
}
return false;
}
@Override
public T next() {
return iterator.next();
}
}
Ну и используем как-то так:
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
Iterator iterator = new CustomIterator(list, 2);
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}