evgeniy8705
@evgeniy8705
Повелитель вселенной

Как слить два интервала Iterable?

Есть метод interval возвращающий интервал [left, right).
class IteratorUtils {
    public static Iterable<Integer> interval(int left, int right) {
        return new IntervalIterable(left, right);
    }

    public static Iterable<Integer> merge(Iterable<Integer> iter0, Iterable<Integer> iter1) {
        // some code
    }
}

class IntervalIterable implements Iterable<Integer> {
    private final int left;
    private final int right;

    public IntervalIterable(int left, int right) {
        this.left = left;
        this.right = right;
    }

    @Override
    public Iterator<Integer> iterator() {
        return new IntervalIterator(left, right);
    }
}

class IntervalIterator implements Iterator<Integer> {
    private final int max;
    private int current;

    public IntervalIterator(int left, int right) {
        this.max = right;
        this.current = left;
    }

    public boolean hasNext() {
        return current < max;
    }

    public Integer next() {
        return current++;
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}


Теперь нужно написать метод merge, который будет сливать 2 интервала.

Использование:
for (int k : merge(interval(10, 12), interval(10, 12))) {
     System.out.print(k + " "); // 10 10 11 11
}


Как теперь реализовать это слияние? Алгоритм слияния двух массивов мне понятен, а вот как написать слияние двух интервалов не могу надумать. Подскажите пожалуйста, как реализовать решение.
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Всё то же самое - реализуете Iterable, который возвращает Iterator, у которого реализуете next и hasNext. Iterator должен хранить два других итератора, которые будет опрашивать по очереди d next/hasNext.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы